From 12035a0c8a7d35bda286524651bbaba672b2fb58 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Fri, 17 May 2024 13:11:35 -0600 Subject: [PATCH 01/97] [ML] Single Metric Viewer embeddable: ensure creating job rule from anomaly click actions is successful (#183554) ## Summary Fixes https://github.com/elastic/kibana/issues/183451 This PR updates the utils functions used by the rule editor flyout to create/update/delete job rules. The functions now accept the services they require in the case that they are not available. This takes a step in the direction of removing dependency on the dependency cache. This needs to be backported to 8.14 so trying to keep code churn as small as possible. A next step will be to convert this utils file to ts and wrap it up as a factory service as we've done with other services that had dependency cache dependencies. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../rule_editor/rule_editor_flyout.js | 9 ++++-- .../components/rule_editor/utils.js | 30 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js index 1f920627151838..795ed8ee16ffc7 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js +++ b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js @@ -337,12 +337,13 @@ class RuleEditorFlyoutUI extends Component { updateRuleAtIndex = (ruleIndex, editedRule) => { const { toasts } = this.props.kibana.services.notifications; + const { mlApiServices, mlJobService } = this.props.kibana.services.mlServices; const { job, anomaly } = this.state; const jobId = job.job_id; const detectorIndex = anomaly.detectorIndex; - saveJobRule(job, detectorIndex, ruleIndex, editedRule) + saveJobRule(job, detectorIndex, ruleIndex, editedRule, mlApiServices, mlJobService) .then((resp) => { if (resp.success) { toasts.add({ @@ -391,11 +392,12 @@ class RuleEditorFlyoutUI extends Component { deleteRuleAtIndex = (index) => { const { toasts } = this.props.kibana.services.notifications; + const { mlApiServices, mlJobService: jobService } = this.props.kibana.services.mlServices; const { job, anomaly } = this.state; const jobId = job.job_id; const detectorIndex = anomaly.detectorIndex; - deleteJobRule(job, detectorIndex, index) + deleteJobRule(job, detectorIndex, index, mlApiServices, jobService) .then((resp) => { if (resp.success) { toasts.addSuccess( @@ -443,7 +445,8 @@ class RuleEditorFlyoutUI extends Component { addItemToFilterList = (item, filterId, closeFlyoutOnAdd) => { const { toasts } = this.props.kibana.services.notifications; - addItemToFilter(item, filterId) + const { mlApiServices } = this.props.kibana.services.mlServices; + addItemToFilter(item, filterId, mlApiServices) .then(() => { if (closeFlyoutOnAdd === true) { toasts.add({ diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/utils.js b/x-pack/plugins/ml/public/application/components/rule_editor/utils.js index fd51ccd7b6b3cb..8d0e89ed6b58fe 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/utils.js +++ b/x-pack/plugins/ml/public/application/components/rule_editor/utils.js @@ -15,8 +15,7 @@ import { ML_DETECTOR_RULE_OPERATOR, } from '@kbn/ml-anomaly-utils'; -import { ml } from '../../services/ml_api_service'; -import { mlJobService } from '../../services/job_service'; +import { mlJobService as importedMlJobService } from '../../services/job_service'; import { processCreatedBy } from '../../../../common/util/job_utils'; export function getNewConditionDefaults() { @@ -70,8 +69,16 @@ export function isValidRule(rule) { return isValid; } -export function saveJobRule(job, detectorIndex, ruleIndex, editedRule) { +export function saveJobRule( + job, + detectorIndex, + ruleIndex, + editedRule, + mlApiServices, + mlJobService +) { const detector = job.analysis_config.detectors[detectorIndex]; + const jobService = mlJobService || importedMlJobService; // Filter out any scope expression where the UI=specific 'enabled' // property is set to false. @@ -103,16 +110,17 @@ export function saveJobRule(job, detectorIndex, ruleIndex, editedRule) { } } - return updateJobRules(job, detectorIndex, rules); + return updateJobRules(job, detectorIndex, rules, mlApiServices, jobService); } -export function deleteJobRule(job, detectorIndex, ruleIndex) { +export function deleteJobRule(job, detectorIndex, ruleIndex, mlApiServices, mlJobService) { + const jobService = mlJobService || importedMlJobService; const detector = job.analysis_config.detectors[detectorIndex]; let customRules = []; if (detector.custom_rules !== undefined && ruleIndex < detector.custom_rules.length) { customRules = cloneDeep(detector.custom_rules); customRules.splice(ruleIndex, 1); - return updateJobRules(job, detectorIndex, customRules); + return updateJobRules(job, detectorIndex, customRules, mlApiServices, jobService); } else { return Promise.reject( new Error( @@ -128,7 +136,7 @@ export function deleteJobRule(job, detectorIndex, ruleIndex) { } } -export function updateJobRules(job, detectorIndex, rules) { +export function updateJobRules(job, detectorIndex, rules, mlApiServices, mlJobService) { // Pass just the detector with the edited rule to the updateJob endpoint. const jobId = job.job_id; const jobData = { @@ -146,9 +154,9 @@ export function updateJobRules(job, detectorIndex, rules) { processCreatedBy(customSettings); jobData.custom_settings = customSettings; } - return new Promise((resolve, reject) => { - ml.updateJob({ jobId: jobId, job: jobData }) + mlApiServices + .updateJob({ jobId: jobId, job: jobData }) .then(() => { // Refresh the job data in the job service before resolving. mlJobService @@ -168,9 +176,9 @@ export function updateJobRules(job, detectorIndex, rules) { // Updates an ML filter used in the scope part of a rule, // adding an item to the filter with the specified ID. -export function addItemToFilter(item, filterId) { +export function addItemToFilter(item, filterId, mlApiServices) { return new Promise((resolve, reject) => { - ml.filters + mlApiServices.filters .updateFilter(filterId, undefined, [item], undefined) .then((updatedFilter) => { resolve(updatedFilter); From 82044e1e732530514acd4914045e00b3720a9261 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Fri, 17 May 2024 14:00:51 -0600 Subject: [PATCH 02/97] [canvas] fix Canvas API should implement HasAppContext interface (#183744) Closes https://github.com/elastic/kibana/issues/183672 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../renderers/embeddable/embeddable.tsx | 71 +++++++++---------- .../embeddable/use_get_app_context.tsx | 27 +++++++ x-pack/plugins/canvas/types/embeddables.ts | 4 +- 3 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/use_get_app_context.tsx diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index 696243680782b9..fd317d09ddfd9e 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -14,14 +14,11 @@ import { isErrorEmbeddable, ReactEmbeddableRenderer, } from '@kbn/embeddable-plugin/public'; -import { PresentationContainer } from '@kbn/presentation-containers'; -import { EmbeddableAppContext } from '@kbn/presentation-publishing'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import React, { FC } from 'react'; +import React, { FC, useMemo } from 'react'; import ReactDOM from 'react-dom'; -import useObservable from 'react-use/lib/useObservable'; import { pluginServices } from '../../../public/services'; -import { CANVAS_APP, CANVAS_EMBEDDABLE_CLASSNAME } from '../../../common/lib'; +import { CANVAS_EMBEDDABLE_CLASSNAME } from '../../../common/lib'; import { RendererStrings } from '../../../i18n'; import { CanvasContainerApi, @@ -32,6 +29,7 @@ import { import { EmbeddableExpression } from '../../expression_types/embeddable'; import { StartDeps } from '../../plugin'; import { embeddableInputToExpression } from './embeddable_input_to_expression'; +import { useGetAppContext } from './use_get_app_context'; const { embeddable: strings } = RendererStrings; @@ -55,28 +53,41 @@ const renderReactEmbeddable = ({ handlers: RendererHandlers; core: CoreStart; }) => { + // wrap in functional component to allow usage of hooks + const RendererWrapper: FC<{ canvasApi: CanvasContainerApi }> = ({ canvasApi }) => { + const getAppContext = useGetAppContext(core); + + useMemo(() => { + canvasApi.getAppContext = getAppContext; + }, [canvasApi, getAppContext]); + + return ( + { + const newExpression = embeddableInputToExpression( + newState.rawState as unknown as EmbeddableInput, + type, + undefined, + true + ); + if (newExpression) handlers.onEmbeddableInputChange(newExpression); + }} + /> + ); + }; + return (
- { - const newExpression = embeddableInputToExpression( - newState.rawState as unknown as EmbeddableInput, - type, - undefined, - true - ); - if (newExpression) handlers.onEmbeddableInputChange(newExpression); - }} - /> +
); @@ -84,23 +95,9 @@ const renderReactEmbeddable = ({ const renderEmbeddableFactory = (core: CoreStart, _plugins: StartDeps) => { const EmbeddableRenderer: FC<{ embeddable: IEmbeddable }> = ({ embeddable }) => { - const currentAppId = useObservable(core.application.currentAppId$, undefined); - - if (!currentAppId) { - return null; - } - - const canvasAppContext: EmbeddableAppContext = { - getCurrentPath: () => { - const urlToApp = core.application.getUrlForApp(currentAppId); - const inAppPath = window.location.pathname.replace(urlToApp, ''); - - return inAppPath + window.location.search + window.location.hash; - }, - currentAppId: CANVAS_APP, - }; + const getAppContext = useGetAppContext(core); - embeddable.getAppContext = () => canvasAppContext; + embeddable.getAppContext = getAppContext; return ; }; diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/use_get_app_context.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/use_get_app_context.tsx new file mode 100644 index 00000000000000..7054d825821842 --- /dev/null +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/use_get_app_context.tsx @@ -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 { useMemo } from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import useObservable from 'react-use/lib/useObservable'; +import { CANVAS_APP } from '../../../common/lib'; + +export function useGetAppContext(core: CoreStart) { + const currentAppId = useObservable(core.application.currentAppId$, undefined); + const getAppContext = useMemo(() => { + return () => ({ + getCurrentPath: () => { + const urlToApp = core.application.getUrlForApp(currentAppId ?? CANVAS_APP); + const inAppPath = window.location.pathname.replace(urlToApp, ''); + + return inAppPath + window.location.search + window.location.hash; + }, + currentAppId: CANVAS_APP, + }); + }, [currentAppId, core.application]); + return getAppContext; +} diff --git a/x-pack/plugins/canvas/types/embeddables.ts b/x-pack/plugins/canvas/types/embeddables.ts index 514cbea6c67733..38aae5f33be7be 100644 --- a/x-pack/plugins/canvas/types/embeddables.ts +++ b/x-pack/plugins/canvas/types/embeddables.ts @@ -8,7 +8,7 @@ import type { TimeRange } from '@kbn/es-query'; import { Filter } from '@kbn/es-query'; import { EmbeddableInput as Input } from '@kbn/embeddable-plugin/common'; -import { PublishesViewMode } from '@kbn/presentation-publishing'; +import { HasAppContext, PublishesViewMode } from '@kbn/presentation-publishing'; import { CanAddNewPanel } from '@kbn/presentation-containers'; export type EmbeddableInput = Input & { @@ -17,4 +17,4 @@ export type EmbeddableInput = Input & { savedObjectId?: string; }; -export type CanvasContainerApi = PublishesViewMode & CanAddNewPanel; +export type CanvasContainerApi = PublishesViewMode & CanAddNewPanel & Partial; From c2d46b0ffe4a4415b61a77eee63074630401a703 Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Fri, 17 May 2024 13:10:41 -0700 Subject: [PATCH 03/97] [Detection Engine] Update test file names (#183212) ## Summary In an effort to more effectively track our test failures, we have a team dashboard. We parse some of these based on file paths. Updating some test names so that they get picked up in these filters more easily. Should also just help in test discoverability as it makes the file names more consistent. --- .../execution_logic/{query.ts => custom_query.ts} | 0 .../trial_license_complete_tier/execution_logic/index.ts | 6 +++--- .../execution_logic/{threat_match.ts => indicator_match.ts} | 0 ..._suppression.ts => indicator_match_alert_suppression.ts} | 0 .../{event_correlation_rule.cy.ts => eql_rule.cy.ts} | 0 ...on_rule_suppression.cy.ts => eql_rule_suppression.cy.ts} | 0 ...ess_basic.cy.ts => eql_rule_suppression_ess_basic.cy.ts} | 0 ...n_sequence.cy.ts => eql_rule_suppression_sequence.cy.ts} | 0 ....ts => eql_rule_suppression_serverless_essentials.cy.ts} | 0 9 files changed, 3 insertions(+), 3 deletions(-) rename x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/{query.ts => custom_query.ts} (100%) rename x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/{threat_match.ts => indicator_match.ts} (100%) rename x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/{threat_match_alert_suppression.ts => indicator_match_alert_suppression.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/{event_correlation_rule.cy.ts => eql_rule.cy.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/{event_correlation_rule_suppression.cy.ts => eql_rule_suppression.cy.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/{event_correlation_rule_suppression_ess_basic.cy.ts => eql_rule_suppression_ess_basic.cy.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/{event_correlation_rule_suppression_sequence.cy.ts => eql_rule_suppression_sequence.cy.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/{event_correlation_rule_suppression_serverless_essentials.cy.ts => eql_rule_suppression_serverless_essentials.cy.ts} (100%) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts index 23406033ed2390..329cef4ac7e8c9 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts @@ -16,11 +16,11 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./new_terms')); loadTestFile(require.resolve('./new_terms_alert_suppression')); loadTestFile(require.resolve('./saved_query')); - loadTestFile(require.resolve('./threat_match')); - loadTestFile(require.resolve('./threat_match_alert_suppression')); + loadTestFile(require.resolve('./indicator_match')); + loadTestFile(require.resolve('./indicator_match_alert_suppression')); loadTestFile(require.resolve('./threshold')); loadTestFile(require.resolve('./threshold_alert_suppression')); loadTestFile(require.resolve('./non_ecs_fields')); - loadTestFile(require.resolve('./query')); + loadTestFile(require.resolve('./custom_query')); }); }; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match_alert_suppression.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match_alert_suppression.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_ess_basic.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_ess_basic.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_ess_basic.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_ess_basic.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_sequence.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_sequence.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_serverless_essentials.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_serverless_essentials.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/event_correlation_rule_suppression_serverless_essentials.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_serverless_essentials.cy.ts From 7a51ad943b5def287af9863654f4681b4c9270ad Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Fri, 17 May 2024 14:11:44 -0700 Subject: [PATCH 04/97] [UII] Update doc links for agent policy settings (#183761) ## Summary Update doc links for some agent policy settings that will be changed with @kilfoyle's work in https://github.com/elastic/ingest-docs/pull/1076 --- .../plugins/fleet/common/settings/agent_policy_settings.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/common/settings/agent_policy_settings.tsx b/x-pack/plugins/fleet/common/settings/agent_policy_settings.tsx index 4ffe46b6807648..ed23ea121eae6e 100644 --- a/x-pack/plugins/fleet/common/settings/agent_policy_settings.tsx +++ b/x-pack/plugins/fleet/common/settings/agent_policy_settings.tsx @@ -36,7 +36,7 @@ export const AGENT_POLICY_ADVANCED_SETTINGS: SettingsConfig[] = [ defaultMessage: 'Limits the maximum number of CPUs that can be executing simultaneously.', }), learnMoreLink: - 'https://www.elastic.co/guide/en/fleet/current/enable-custom-policy-settings.html#limit-cpu-usage', + 'https://www.elastic.co/guide/en/fleet/current/agent-policy.html#agent-policy-limit-cpu', api_field: { name: 'agent_limits_go_max_procs', }, @@ -121,7 +121,7 @@ export const AGENT_POLICY_ADVANCED_SETTINGS: SettingsConfig[] = [ } ), learnMoreLink: - 'https://www.elastic.co/guide/en/fleet/current/enable-custom-policy-settings.html#override-default-monitoring-port', + 'https://www.elastic.co/guide/en/fleet/current/agent-policy.html#agent-policy-http-monitoring', schema: z .object({ // enabled: z.boolean().describe('Enabled').default(false), @@ -146,6 +146,8 @@ export const AGENT_POLICY_ADVANCED_SETTINGS: SettingsConfig[] = [ api_field: { name: 'agent_logging_level', }, + learnMoreLink: + 'https://www.elastic.co/guide/en/fleet/current/agent-policy.html#agent-policy-log-level', schema: z.nativeEnum(AGENT_LOG_LEVELS).default(DEFAULT_LOG_LEVEL), }, ]; From 135961b720657960f7648887246383833645d7e3 Mon Sep 17 00:00:00 2001 From: Isaac Karrer Date: Fri, 17 May 2024 17:06:18 -0500 Subject: [PATCH 05/97] Update docker.elastic.co/ci-agent-images/quality-gate-seedling Docker tag to v0.0.4 (#183781) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | docker.elastic.co/ci-agent-images/quality-gate-seedling | patch | `0.0.2` -> `0.0.4` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: Renovate Bot --- .buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml index c24a1d504cd822..6fa4ddf634524b 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml @@ -26,7 +26,7 @@ steps: QG_PIPELINE_LOCATION: ".buildkite/pipelines/quality-gates" command: "make -C /agent run-environment-tests" # will trigger https://buildkite.com/elastic/kibana-tests agents: - image: "docker.elastic.co/ci-agent-images/quality-gate-seedling:0.0.2" + image: "docker.elastic.co/ci-agent-images/quality-gate-seedling:0.0.4" notify: - slack: "${TEAM_CHANNEL?}" From b4e863074d3745bb8ec39bde984f91645329d760 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Sat, 18 May 2024 01:06:23 +0100 Subject: [PATCH 06/97] skip flaky suite (#183787) --- .../detection_alerts/assignments/assignments.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts index 2b28c6d0c8885d..d1e800f13672af 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts @@ -40,7 +40,8 @@ import { } from '../../../../../tasks/alert_assignments'; import { ALERTS_COUNT } from '../../../../../screens/alerts'; -describe('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { +// FLAKY: https://github.com/elastic/kibana/issues/183787 +describe.skip('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); }); From e2ccaf2c5305b7c3843d77a7aed20306eb0bf73f Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Fri, 17 May 2024 21:17:17 -0400 Subject: [PATCH 07/97] [Serverless_search] Fix index overview page storage cards to show actual bytes size (#183444) ~~Adds a fix to fetch index dataset size from `_cat/indices/{indexName} ` rather than from `Get /{indexName}/_stats`. As `_stats ` doesn't exist in Serverless. We will show only Total size and removed showing primary store size as it's not populated from ES in `_cat/indices/{indexName} ` Serverless~~ **Update** Removes showing storage card from index detail page & remove fetching `Get /{indexName}/_stats` https://github.com/elastic/kibana/assets/55930906/7a1f0661-75eb-42a9-a1e0-128c1fbace6f --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../serverless_search/common/types/index.ts | 4 +- .../index_management/index_overview.tsx | 72 ------------------- .../server/lib/indices/fetch_index.test.ts | 47 +----------- .../server/lib/indices/fetch_index.ts | 20 ++---- .../translations/translations/fr-FR.json | 4 -- .../translations/translations/ja-JP.json | 4 -- .../translations/translations/zh-CN.json | 4 -- .../page_objects/index_management_page.ts | 42 +++++++++++ .../management/index_management/index.ts | 1 + .../index_management/index_detail.ts | 41 +++++++++++ .../management/index_management/indices.ts | 12 +++- 11 files changed, 102 insertions(+), 149 deletions(-) create mode 100644 x-pack/test_serverless/functional/test_suites/common/management/index_management/index_detail.ts diff --git a/x-pack/plugins/serverless_search/common/types/index.ts b/x-pack/plugins/serverless_search/common/types/index.ts index c2ea72f13c8e9c..f4504bde81faf2 100644 --- a/x-pack/plugins/serverless_search/common/types/index.ts +++ b/x-pack/plugins/serverless_search/common/types/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IndicesIndexState, IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; +import { IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; import { Connector } from '@kbn/search-connectors/types/connectors'; export interface CreateAPIKeyArgs { @@ -23,12 +23,10 @@ export interface IndexData { export interface FetchIndicesResult { indices: IndexData[]; } - export interface FetchIndexResult { index: IndicesIndexState & { connector?: Connector; count: number; - stats?: IndicesStatsIndicesStats; }; } diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx index f1db8d49e038a0..334eaf8326c005 100644 --- a/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx @@ -6,7 +6,6 @@ */ import React, { FunctionComponent } from 'react'; -import numeral from '@elastic/numeral'; import { i18n } from '@kbn/i18n'; import { FormattedMessage, FormattedPlural } from '@kbn/i18n-react'; import { @@ -15,7 +14,6 @@ import { EuiFlexGrid, EuiFlexItem, EuiFlexGroup, - EuiIcon, EuiI18nNumber, EuiText, EuiBadge, @@ -185,76 +183,6 @@ export const IndexDetailOverview: FunctionComponent = - {indexData.count > 0 && ( - - - } - footer={ - - - - - - - , - deletedCount: ( - - ), - }} - /> - - - - } - > - - - - {numeral( - indexData.stats?.primaries?.store?.total_data_set_size_in_bytes ?? 0 - ).format('0 b')} - - - - -

- -

-
-
- - - {numeral( - indexData.stats?.total?.store?.total_data_set_size_in_bytes ?? 0 - ).format('0 b')} - - - - -

- -

-
-
-
-
-
- )} {indexData.count === 0 && ( <> diff --git a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts index 75bc95365bb045..1197c48661b358 100644 --- a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts +++ b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts @@ -9,7 +9,6 @@ jest.mock('@kbn/search-connectors', () => ({ fetchConnectorByIndexName: jest.fn(), })); -import { ByteSizeValue } from '@kbn/config-schema'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { fetchConnectorByIndexName } from '@kbn/search-connectors'; @@ -19,7 +18,6 @@ describe('fetch index lib function', () => { const mockClient = { indices: { get: jest.fn(), - stats: jest.fn(), }, count: jest.fn(), }; @@ -31,25 +29,7 @@ describe('fetch index lib function', () => { aliases: {}, }, }; - const regularIndexStatsResponse = { - indices: { - 'search-regular-index': { - health: 'green', - size: new ByteSizeValue(108000).toString(), - status: 'open', - total: { - docs: { - count: 100, - deleted: 0, - }, - store: { - size_in_bytes: 108000, - }, - }, - uuid: '83a81e7e-5955-4255-b008-5d6961203f57', - }, - }, - }; + const indexCountResponse = { count: 100, }; @@ -63,7 +43,6 @@ describe('fetch index lib function', () => { it('should return index if all client calls succeed', async () => { mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); - mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); mockClient.count.mockResolvedValue(indexCountResponse); (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); @@ -72,44 +51,23 @@ describe('fetch index lib function', () => { aliases: {}, count: 100, connector: indexConnector, - stats: regularIndexStatsResponse.indices[indexName], }, }); }); - it('should throw an error if get index rejects', async () => { const expectedError = new Error('Boom!'); mockClient.indices.get.mockRejectedValue(expectedError); - mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); mockClient.count.mockResolvedValue(indexCountResponse); (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); await expect(fetchIndex(client(), indexName)).rejects.toEqual(expectedError); }); - it('should return partial data if index stats rejects', async () => { - const expectedError = new Error('Boom!'); - - mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); - mockClient.indices.stats.mockRejectedValue(expectedError); - mockClient.count.mockResolvedValue(indexCountResponse); - (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); - - await expect(fetchIndex(client(), indexName)).resolves.toMatchObject({ - index: { - aliases: {}, - count: 100, - connector: indexConnector, - }, - }); - }); - it('should return partial data if index count rejects', async () => { const expectedError = new Error('Boom!'); mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); - mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); mockClient.count.mockRejectedValue(expectedError); (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); @@ -118,7 +76,6 @@ describe('fetch index lib function', () => { aliases: {}, count: 0, connector: indexConnector, - stats: regularIndexStatsResponse.indices[indexName], }, }); }); @@ -127,7 +84,6 @@ describe('fetch index lib function', () => { const expectedError = new Error('Boom!'); mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); - mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); mockClient.count.mockResolvedValue(indexCountResponse); (fetchConnectorByIndexName as unknown as jest.Mock).mockRejectedValue(expectedError); @@ -135,7 +91,6 @@ describe('fetch index lib function', () => { index: { aliases: {}, count: 100, - stats: regularIndexStatsResponse.indices[indexName], }, }); }); diff --git a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts index 000eb1c13ea0a3..fec67fd8584c15 100644 --- a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts +++ b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts @@ -4,23 +4,20 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { fetchConnectorByIndexName } from '@kbn/search-connectors'; - import { FetchIndexResult } from '../../../common/types'; export async function fetchIndex( client: ElasticsearchClient, indexName: string ): Promise { - const [indexDataResult, indexStatsResult, indexCountResult, connectorResult] = - await Promise.allSettled([ - client.indices.get({ index: indexName }), - client.indices.stats({ index: indexName }), - client.count({ index: indexName }), - fetchConnectorByIndexName(client, indexName), - ]); + const [indexDataResult, indexCountResult, connectorResult] = await Promise.allSettled([ + client.indices.get({ index: indexName }), + client.count({ index: indexName }), + fetchConnectorByIndexName(client, indexName), + ]); + if (indexDataResult.status === 'rejected') { throw indexDataResult.reason; } @@ -30,16 +27,11 @@ export async function fetchIndex( const index = indexData[indexName]; const count = indexCountResult.status === 'fulfilled' ? indexCountResult.value.count : 0; const connector = connectorResult.status === 'fulfilled' ? connectorResult.value : undefined; - const stats = - indexStatsResult.status === 'fulfilled' - ? indexStatsResult.value.indices?.[indexName] - : undefined; return { index: { ...index, count, connector, - stats, }, }; } diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 48ab3c8c34bc25..103c47a2383579 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -38131,7 +38131,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.title": "{indexName} Alias", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.body": "Personnalisez ces variables en fonction de votre contenu. Pour un guide d'installation complet, consultez notre guide {getStartedLink}.", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body": "Alimentez votre index avec des données en utilisant {logstashLink}, {beatsLink}, {connectorsLink} ou RESTful {apiCallsLink}.", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.documentCount": "{documentCount} documents / {deletedCount} supprimés", "xpack.serverlessSearch.searchConnectors.configurationConnector.config.documentation.description": "Ce connecteur prend en charge plusieurs méthodes d'authentification. Demandez à votre administrateur les informations d'identification correctes pour la connexion. {documentationUrl}", "xpack.serverlessSearch.apiKey.apiKeyStepDescription": "Cette clé ne s’affichera qu’une fois, conservez-la donc en lieu sûr. Nous ne conservons pas vos clés d’API, vous devrez donc générer une clé de remplacement si vous la perdez.", "xpack.serverlessSearch.apiKey.apiKeyStepTitle": "Stocker cette clé d'API", @@ -38257,9 +38256,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.description": "Une erreur s'est produite lors du chargement de l'index.", "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.title": "Impossible de charger l'index", "xpack.serverlessSearch.indexManagement.indexDetails.overview.loading.title": "Chargement de l'index", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.primaryLabel": "Principale", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.title": "Stockage", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.totalLabel": "Total", "xpack.serverlessSearch.indexManagementTab.documents": "Documents", "xpack.serverlessSearch.indexManagementTab.documents.noMappings": "Aucun document trouvé pour l'index", "xpack.serverlessSearch.indexMappings.ingestPipelinesDocs.description": "Vous souhaitez ajouter des champs personnalisés ou utiliser des modèles de ML entraînés pour analyser et enrichir vos documents indexés ? Utilisez des pipelines d'ingestion spécifiques de l'index pour personnaliser les documents selon vos besoins.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index dac5c30126d51b..0c0fa7527290e6 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -38099,7 +38099,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.title": "{indexName}エイリアス", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.body": "これらの変数をコンテンツに合わせてカスタマイズします。詳細なセットアップガイドについては、{getStartedLink}ガイドをご覧ください。", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body": "{logstashLink}、{beatsLink}、{connectorsLink}、またはRESTful {apiCallsLink}を使用して、データにインデックスを入力します。", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.documentCount": "{documentCount}件のドキュメント / {deletedCount}削除済み", "xpack.serverlessSearch.searchConnectors.configurationConnector.config.documentation.description": "このコネクターは複数の認証方法をサポートします。正しい接続資格情報については、管理者に確認してください。{documentationUrl}", "xpack.serverlessSearch.apiKey.apiKeyStepDescription": "このキーは一度しか表示されないため、安全な場所に保存しておいてください。当社はお客様のAPIキーを保存しません。キーを紛失した場合は、代替キーを生成する必要があります。", "xpack.serverlessSearch.apiKey.apiKeyStepTitle": "このAPIキーを保存", @@ -38225,9 +38224,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.description": "インデックスの読み込みエラーが発生しました。", "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.title": "インデックスを読み込めません", "xpack.serverlessSearch.indexManagement.indexDetails.overview.loading.title": "インデックスを読み込んでいます", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.primaryLabel": "プライマリ", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.title": "ストレージ", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.totalLabel": "合計", "xpack.serverlessSearch.indexManagementTab.documents": "ドキュメント", "xpack.serverlessSearch.indexManagementTab.documents.noMappings": "インデックスドキュメントが見つかりません", "xpack.serverlessSearch.indexMappings.ingestPipelinesDocs.description": "カスタムフィールドを追加したり、学習済みのMLモデルを使用してインデックスされたドキュメントを分析したり、インデックスされたドキュメントをリッチ化したいですか?インデックス固有のインジェストパイプラインを使用して、ニーズに合わせてドキュメントをカスタマイズします。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7e2e9e2e28f1e7..b14b4d28e33a93 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -38143,7 +38143,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.title": "{indexName} 别名", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.body": "定制这些变量以匹配您的内容。如需完整的设置指南,请访问我们的{getStartedLink}指南。", "xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body": "使用 {logstashLink}、{beatsLink}、{connectorsLink} 或 RESTful {apiCallsLink} 为您的索引填充数据。", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.documentCount": "{documentCount} 个文档/{deletedCount} 个已删除", "xpack.serverlessSearch.searchConnectors.configurationConnector.config.documentation.description": "此连接器支持几种身份验证方法。请联系管理员获取正确的连接凭据。{documentationUrl}", "xpack.serverlessSearch.apiKey.apiKeyStepDescription": "此密钥仅显示一次,因此请将其保存到某个安全位置。我们不存储您的 API 密钥,因此,如果您丢失了密钥,则需要生成替代密钥。", "xpack.serverlessSearch.apiKey.apiKeyStepTitle": "存储此 API 密钥", @@ -38269,9 +38268,6 @@ "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.description": "加载索引时出错。", "xpack.serverlessSearch.indexManagement.indexDetails.overview.error.title": "无法加载索引", "xpack.serverlessSearch.indexManagement.indexDetails.overview.loading.title": "正在加载索引", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.primaryLabel": "主分片", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.title": "存储", - "xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.totalLabel": "合计", "xpack.serverlessSearch.indexManagementTab.documents": "文档", "xpack.serverlessSearch.indexManagementTab.documents.noMappings": "找不到索引的文档", "xpack.serverlessSearch.indexMappings.ingestPipelinesDocs.description": "想要添加定制字段,或使用已训练 ML 模型分析并扩充您的已索引文档?使用特定于索引的采集管道根据您的需求来定制文档。", diff --git a/x-pack/test/functional/page_objects/index_management_page.ts b/x-pack/test/functional/page_objects/index_management_page.ts index 718dac14221aca..4cf5e6a36e3761 100644 --- a/x-pack/test/functional/page_objects/index_management_page.ts +++ b/x-pack/test/functional/page_objects/index_management_page.ts @@ -129,6 +129,11 @@ export function IndexManagementPageProvider({ getService }: FtrProviderContext) return (await testSubjects.isDisplayed('indexDetailsHeader')) === true; }); }, + async expectIndexDetailsPageIsLoaded() { + await testSubjects.existOrFail('indexDetailsTab-overview'); + await testSubjects.existOrFail('indexDetailsContent'); + await testSubjects.existOrFail('indexDetailsBackToIndicesButton'); + }, }, async clickCreateIndexButton() { await testSubjects.click('createIndexButton'); @@ -153,5 +158,42 @@ export function IndexManagementPageProvider({ getService }: FtrProviderContext) ); expect(indexNames.some((i) => i === indexName)).to.be(true); }, + + async selectIndex(indexName: string) { + const id = `checkboxSelectIndex-${indexName}`; + const checkbox = await find.byCssSelector(`input[id="${id}"]`); + if (!(await checkbox.isSelected())) { + await find.clickByCssSelector(`input[id="${id}"]`); + } + }, + async clickManageButton() { + await testSubjects.existOrFail('indexActionsContextMenuButton'); + await testSubjects.click('indexActionsContextMenuButton'); + }, + async contextMenuIsVisible() { + await testSubjects.existOrFail('indexContextMenu'); + await testSubjects.existOrFail('deleteIndexMenuButton'); + await testSubjects.click('deleteIndexMenuButton'); + }, + async confirmDeleteModalIsVisible() { + await testSubjects.existOrFail('confirmModalTitleText'); + const modalText: string = await testSubjects.getVisibleText('confirmModalTitleText'); + expect(modalText).to.be('Delete index'); + await testSubjects.existOrFail('confirmModalConfirmButton'); + await testSubjects.click('confirmModalConfirmButton'); + // wait for index to be deleted + await testSubjects.missingOrFail('confirmModalConfirmButton'); + }, + + async expectIndexIsDeleted(indexName: string) { + const table = await find.byCssSelector('table'); + const rows = await table.findAllByTestSubject('indexTableRow'); + const indexNames: string[] = await Promise.all( + rows.map(async (row) => { + return await (await row.findByTestSubject('indexTableIndexNameLink')).getVisibleText(); + }) + ); + expect(indexNames.includes(indexName)).to.be(false); + }, }; } diff --git a/x-pack/test_serverless/functional/test_suites/common/management/index_management/index.ts b/x-pack/test_serverless/functional/test_suites/common/management/index_management/index.ts index 0df628a2ba587e..4d69adb9b6bedb 100644 --- a/x-pack/test_serverless/functional/test_suites/common/management/index_management/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/management/index_management/index.ts @@ -15,5 +15,6 @@ export default ({ loadTestFile }: FtrProviderContext) => { loadTestFile(require.resolve('./enrich_policies')); loadTestFile(require.resolve('./index_templates')); loadTestFile(require.resolve('./indices')); + loadTestFile(require.resolve('./index_detail')); }); }; diff --git a/x-pack/test_serverless/functional/test_suites/common/management/index_management/index_detail.ts b/x-pack/test_serverless/functional/test_suites/common/management/index_management/index_detail.ts new file mode 100644 index 00000000000000..b4e9aad21d2c6f --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/management/index_management/index_detail.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default ({ getPageObjects, getService }: FtrProviderContext) => { + const pageObjects = getPageObjects(['svlCommonPage', 'common', 'indexManagement', 'header']); + const browser = getService('browser'); + const security = getService('security'); + const testIndexName = `index-ftr-test-${Math.random()}`; + describe('Index Details ', function () { + before(async () => { + await security.testUser.setRoles(['index_management_user']); + await pageObjects.svlCommonPage.loginAsAdmin(); + await pageObjects.common.navigateToApp('indexManagement'); + // Navigate to the indices tab + await pageObjects.indexManagement.changeTabs('indicesTab'); + await pageObjects.header.waitUntilLoadingHasFinished(); + }); + + it('renders the indices tab', async () => { + const url = await browser.getCurrentUrl(); + expect(url).to.contain(`/indices`); + }); + it('can create an index', async () => { + await pageObjects.indexManagement.clickCreateIndexButton(); + await pageObjects.indexManagement.setCreateIndexName(testIndexName); + await pageObjects.indexManagement.clickCreateIndexSaveButton(); + await pageObjects.indexManagement.expectIndexToExist(testIndexName); + }); + it('index with no documents', async () => { + await pageObjects.indexManagement.indexDetailsPage.openIndexDetailsPage(0); + await pageObjects.indexManagement.indexDetailsPage.expectIndexDetailsPageIsLoaded(); + }); + }); +}; diff --git a/x-pack/test_serverless/functional/test_suites/common/management/index_management/indices.ts b/x-pack/test_serverless/functional/test_suites/common/management/index_management/indices.ts index c0994de0885131..fe5938109d7b85 100644 --- a/x-pack/test_serverless/functional/test_suites/common/management/index_management/indices.ts +++ b/x-pack/test_serverless/functional/test_suites/common/management/index_management/indices.ts @@ -22,17 +22,25 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.indexManagement.changeTabs('indicesTab'); await pageObjects.header.waitUntilLoadingHasFinished(); }); - + const testIndexName = `index-ftr-test-${Math.random()}`; it('renders the indices tab', async () => { const url = await browser.getCurrentUrl(); expect(url).to.contain(`/indices`); }); it('can create an index', async () => { - const testIndexName = `index-ftr-test-${Math.random()}`; await pageObjects.indexManagement.clickCreateIndexButton(); await pageObjects.indexManagement.setCreateIndexName(testIndexName); await pageObjects.indexManagement.clickCreateIndexSaveButton(); await pageObjects.indexManagement.expectIndexToExist(testIndexName); }); + it('can manage index', async () => { + await pageObjects.indexManagement.selectIndex(testIndexName); + await pageObjects.indexManagement.clickManageButton(); + await pageObjects.indexManagement.contextMenuIsVisible(); + }); + it('can delete index', async () => { + await pageObjects.indexManagement.confirmDeleteModalIsVisible(); + await pageObjects.indexManagement.expectIndexIsDeleted(testIndexName); + }); }); }; From 808a89c6abe460a64ddf9233d7c58e28731cdf14 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Sat, 18 May 2024 00:36:20 -0300 Subject: [PATCH 08/97] [Discover] Rely on `dataSource` for ES|QL mode (#183108) ## Summary This PR updates Discover to rely on `dataSource` for determining if ES|QL mode is enabled instead of relying on `query` directly. This creates a clearer separation between the modes and moves Discover toward supporting multiple data source types. It also includes a number of cleanups around ES|QL mode that make the intent of the code clearer and removes tech debt / code duplication. Changes included in the PR: - Add a new `useIsEsqlMode` hook that relies on `dataSource` for checking if Discover is in ES|QL mode. - Remove "raw record type" concept in Discover and replace it with ES|QL `dataSource` checks. - Remove references to `isPlainRecord` and replace them with ES|QL `dataSource` checks. - Remove `isTextBasedQuery` utility function and replace it with ES|QL `dataSource` checks or `isOfAggregateQueryType` where casting is necessary. - Replace references to `isOfAggregateQueryType` with ES|QL `dataSource` checks except where casting is necessary. - Replace other references to "text based" with "ES|QL" for clarity and consistency. Closes #181963. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../src/utils/is_legacy_table_enabled.ts | 6 +- .../common/utils/sorting/get_default_sort.ts | 8 +- .../discover/common/utils/sorting/get_sort.ts | 28 +++--- .../sorting/get_sort_for_search_source.ts | 2 +- .../document_explorer_update_callout.test.tsx | 10 +- .../components/layout/discover_documents.tsx | 46 ++++----- .../layout/discover_histogram_layout.test.tsx | 11 +-- .../layout/discover_histogram_layout.tsx | 15 ++- .../layout/discover_layout.test.tsx | 5 - .../components/layout/discover_layout.tsx | 91 +++++++++--------- .../layout/discover_main_content.test.tsx | 17 ++-- .../layout/discover_main_content.tsx | 17 ++-- .../selected_vs_available_callout.test.tsx | 56 ++++++----- .../layout/selected_vs_available_callout.tsx | 21 ++-- .../layout/use_discover_histogram.test.tsx | 16 ++-- .../layout/use_discover_histogram.ts | 74 +++++++-------- .../layout/use_fetch_more_records.test.tsx | 95 ++++++++++--------- .../layout/use_fetch_more_records.ts | 7 +- .../components/no_results/no_results.test.tsx | 24 +++-- .../no_results_suggestions.tsx | 16 +--- .../discover_sidebar_responsive.test.tsx | 32 +++---- .../sidebar/discover_sidebar_responsive.tsx | 19 ++-- .../components/sidebar/lib/get_field_list.ts | 8 +- .../sidebar/lib/sidebar_reducer.test.ts | 20 ++-- .../components/sidebar/lib/sidebar_reducer.ts | 14 +-- .../components/top_nav/discover_topnav.tsx | 29 +++--- .../top_nav/get_top_nav_links.test.ts | 4 +- .../components/top_nav/get_top_nav_links.tsx | 10 +- .../components/top_nav/on_save_search.tsx | 14 ++- .../top_nav/open_alerts_popover.test.tsx | 4 +- .../top_nav/open_alerts_popover.tsx | 18 ++-- .../components/top_nav/use_discover_topnav.ts | 10 +- .../main/data_fetching/fetch_all.test.ts | 67 +++++-------- .../main/data_fetching/fetch_all.ts | 58 +++++------ .../{fetch_text_based.ts => fetch_esql.ts} | 26 ++--- .../application/main/discover_main_app.tsx | 5 +- .../application/main/discover_main_route.tsx | 9 +- .../main/hooks/use_adhoc_data_views.ts | 8 +- ...nguage.test.tsx => use_esql_mode.test.tsx} | 41 ++------ ...sed_query_language.ts => use_esql_mode.ts} | 16 ++-- ...ehavior_subject.ts => use_is_esql_mode.ts} | 16 ++-- .../hooks/use_saved_search_messages.test.ts | 8 +- .../main/hooks/use_saved_search_messages.ts | 58 ++--------- .../discover_data_state_container.test.ts | 15 +-- .../discover_data_state_container.ts | 39 +++----- .../utils/build_state_subscribe.ts | 24 ++--- .../utils/cleanup_url_state.ts | 16 ++-- ...ang.test.ts => get_esql_data_view.test.ts} | 12 +-- ...ed_query_lang.ts => get_esql_data_view.ts} | 2 +- .../utils/get_state_defaults.test.ts | 14 +-- .../utils/get_state_defaults.ts | 18 ++-- .../utils/get_switch_data_view_app_state.ts | 6 +- .../utils/load_saved_search.ts | 15 +-- .../utils/resolve_data_view.ts | 12 +-- .../utils/update_saved_search.ts | 11 ++- .../main/utils/get_raw_record_type.test.ts | 23 ----- .../main/utils/get_raw_record_type.ts | 18 ---- .../main/utils/get_valid_view_mode.test.ts | 14 +-- .../main/utils/get_valid_view_mode.ts | 10 +- .../main/utils/is_text_based_query.test.ts | 17 ---- .../main/utils/is_text_based_query.ts | 18 ---- .../discover/public/application/types.ts | 4 +- .../discover_grid_flyout.test.tsx | 2 +- .../discover_grid_flyout.tsx | 16 ++-- .../discover_tour/discover_tour.test.tsx | 6 +- .../discover_tour/discover_tour_provider.tsx | 14 +-- .../doc_table/components/table_row.test.tsx | 4 +- .../doc_table/components/table_row.tsx | 8 +- .../components/table_row_details.tsx | 12 +-- .../doc_table/create_doc_table_embeddable.tsx | 2 +- .../doc_table/doc_table_embeddable.tsx | 2 +- .../doc_table/doc_table_wrapper.tsx | 10 +- .../view_mode_toggle.test.tsx | 8 +- .../view_mode_toggle/view_mode_toggle.tsx | 10 +- .../embeddable/saved_search_embeddable.tsx | 36 +++---- .../saved_search_embeddable_component.tsx | 7 +- .../public/utils/get_sharing_data.test.ts | 2 +- .../discover/public/utils/get_sharing_data.ts | 4 +- .../discover/public/utils/sorting/get_sort.ts | 6 +- .../components/doc_viewer_source/source.tsx | 2 +- .../unified_doc_viewer/public/plugin.tsx | 2 +- .../apps/discover/group3/_lens_vis.ts | 2 +- .../apps/discover/group3/_panels_toggle.ts | 6 +- .../apps/discover/group6/_sidebar.ts | 6 +- .../discover/group6/_sidebar_field_stats.ts | 2 +- .../discover/group6/_time_field_column.ts | 22 ++--- .../apps/discover/group6/_view_mode_toggle.ts | 4 +- .../translations/translations/fr-FR.json | 6 +- .../translations/translations/ja-JP.json | 6 +- .../translations/translations/zh-CN.json | 6 +- .../apps/discover/visualize_field.ts | 6 +- 91 files changed, 667 insertions(+), 899 deletions(-) rename src/plugins/discover/public/application/main/data_fetching/{fetch_text_based.ts => fetch_esql.ts} (80%) rename src/plugins/discover/public/application/main/hooks/{use_test_based_query_language.test.tsx => use_esql_mode.test.tsx} (87%) rename src/plugins/discover/public/application/main/hooks/{use_text_based_query_language.ts => use_esql_mode.ts} (90%) rename src/plugins/discover/public/application/main/hooks/{use_behavior_subject.ts => use_is_esql_mode.ts} (50%) rename src/plugins/discover/public/application/main/state_management/utils/{get_data_view_by_text_based_query_lang.test.ts => get_esql_data_view.test.ts} (81%) rename src/plugins/discover/public/application/main/state_management/utils/{get_data_view_by_text_based_query_lang.ts => get_esql_data_view.ts} (96%) delete mode 100644 src/plugins/discover/public/application/main/utils/get_raw_record_type.test.ts delete mode 100644 src/plugins/discover/public/application/main/utils/get_raw_record_type.ts delete mode 100644 src/plugins/discover/public/application/main/utils/is_text_based_query.test.ts delete mode 100644 src/plugins/discover/public/application/main/utils/is_text_based_query.ts diff --git a/packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts b/packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts index 7e575cf80dbfb6..8aabd922016647 100644 --- a/packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts +++ b/packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts @@ -11,12 +11,12 @@ import { DOC_TABLE_LEGACY } from '../constants'; export function isLegacyTableEnabled({ uiSettings, - isTextBasedQueryMode, + isEsqlMode, }: { uiSettings: IUiSettingsClient; - isTextBasedQueryMode: boolean; + isEsqlMode: boolean; }): boolean { - if (isTextBasedQueryMode) { + if (isEsqlMode) { return false; // only show the new data grid } diff --git a/src/plugins/discover/common/utils/sorting/get_default_sort.ts b/src/plugins/discover/common/utils/sorting/get_default_sort.ts index 5e4e38f2d82b94..8a0fb633238035 100644 --- a/src/plugins/discover/common/utils/sorting/get_default_sort.ts +++ b/src/plugins/discover/common/utils/sorting/get_default_sort.ts @@ -12,21 +12,21 @@ import { isSortable } from './get_sort'; /** * use in case the user didn't manually sort. - * the default sort is returned depending on the data view or non for text based queries + * the default sort is returned depending on the data view or non for ES|QL queries */ export function getDefaultSort( dataView: DataView | undefined, defaultSortOrder: string = 'desc', hidingTimeColumn: boolean = false, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ): SortOrder[] { - if (isTextBasedQueryMode) { + if (isEsqlMode) { return []; } if ( dataView?.timeFieldName && - isSortable(dataView.timeFieldName, dataView, isTextBasedQueryMode) && + isSortable(dataView.timeFieldName, dataView, isEsqlMode) && !hidingTimeColumn ) { return [[dataView.timeFieldName, defaultSortOrder]]; diff --git a/src/plugins/discover/common/utils/sorting/get_sort.ts b/src/plugins/discover/common/utils/sorting/get_sort.ts index 82a2f801906cd7..f0a9c7b5b22650 100644 --- a/src/plugins/discover/common/utils/sorting/get_sort.ts +++ b/src/plugins/discover/common/utils/sorting/get_sort.ts @@ -14,14 +14,10 @@ export type SortPairObj = Record; export type SortPair = SortOrder | SortPairObj; export type SortInput = SortPair | SortPair[]; -export function isSortable( - fieldName: string, - dataView: DataView, - isTextBasedQueryMode: boolean -): boolean { - if (isTextBasedQueryMode) { - // in-memory sorting is used for text-based queries - // would be great to have a way to determine if a text-based column is sortable +export function isSortable(fieldName: string, dataView: DataView, isEsqlMode: boolean): boolean { + if (isEsqlMode) { + // in-memory sorting is used for ES|QL queries + // would be great to have a way to determine if a ES|QL column is sortable return fieldName !== '_source'; } const field = dataView.getFieldByName(fieldName); @@ -31,18 +27,18 @@ export function isSortable( function createSortObject( sortPair: SortInput, dataView: DataView, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ): SortPairObj | undefined { if ( Array.isArray(sortPair) && sortPair.length === 2 && - isSortable(String(sortPair[0]), dataView, isTextBasedQueryMode) + isSortable(String(sortPair[0]), dataView, isEsqlMode) ) { const [field, direction] = sortPair as SortOrder; return { [field]: direction }; } else if ( isPlainObject(sortPair) && - isSortable(Object.keys(sortPair)[0], dataView, isTextBasedQueryMode) + isSortable(Object.keys(sortPair)[0], dataView, isEsqlMode) ) { return sortPair as SortPairObj; } @@ -59,13 +55,13 @@ export function isLegacySort(sort: SortPair[] | SortPair): sort is SortPair { * @param {array} sort two dimensional array [[fieldToSort, directionToSort]] * or an array of objects [{fieldToSort: directionToSort}] * @param {object} dataView used for determining default sort - * @param {boolean} isTextBasedQueryMode + * @param {boolean} isEsqlMode * @returns Array<{object}> an array of sort objects */ export function getSort( sort: SortPair[] | SortPair, dataView: DataView, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ): SortPairObj[] { if (Array.isArray(sort)) { if (isLegacySort(sort)) { @@ -73,7 +69,7 @@ export function getSort( return [{ [sort[0]]: sort[1] }]; } return sort - .map((sortPair: SortPair) => createSortObject(sortPair, dataView, isTextBasedQueryMode)) + .map((sortPair: SortPair) => createSortObject(sortPair, dataView, isEsqlMode)) .filter((sortPairObj) => typeof sortPairObj === 'object') as SortPairObj[]; } return []; @@ -86,9 +82,9 @@ export function getSort( export function getSortArray( sort: SortInput, dataView: DataView, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ): SortOrder[] { - return getSort(sort, dataView, isTextBasedQueryMode).reduce((acc: SortOrder[], sortPair) => { + return getSort(sort, dataView, isEsqlMode).reduce((acc: SortOrder[], sortPair) => { const entries = Object.entries(sortPair); if (entries && entries[0]) { acc.push(entries[0]); diff --git a/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts b/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts index d63c75a4f01501..e19372e9f505eb 100644 --- a/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts +++ b/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts @@ -46,7 +46,7 @@ export function getSortForSearchSource({ } const { timeFieldName } = dataView; - const sortPairs = getSort(sort, dataView, false); // text based request is not using search source + const sortPairs = getSort(sort, dataView, false); // ES|QL request is not using search source const sortForSearchSource = sortPairs.map((sortPair: Record) => { if (timeFieldName && sortPair[timeFieldName]) { diff --git a/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_update_callout.test.tsx b/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_update_callout.test.tsx index 3b46dbe1b8bca6..d5d46870ef33f3 100644 --- a/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_update_callout.test.tsx +++ b/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_update_callout.test.tsx @@ -17,6 +17,8 @@ import { LocalStorageMock } from '../../../../__mocks__/local_storage_mock'; import { DiscoverServices } from '../../../../build_services'; import { discoverServiceMock } from '../../../../__mocks__/services'; import { DiscoverTourProvider } from '../../../../components/discover_tour'; +import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; +import { DiscoverMainProvider } from '../../state_management/discover_state_provider'; const defaultServices = { ...discoverServiceMock, @@ -62,9 +64,11 @@ describe('Document Explorer Update callout', () => { it('should start a tour when the button is clicked', () => { const result = mountWithIntl( - - - + + + + + ); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index b5f50f2ca9c141..f382f61275b670 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -46,7 +46,6 @@ import { useInternalStateSelector } from '../../state_management/discover_intern import { useAppStateSelector } from '../../state_management/discover_app_state_container'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { FetchStatus } from '../../../types'; -import { RecordRawType } from '../../state_management/discover_data_state_container'; import { DiscoverStateContainer } from '../../state_management/discover_state'; import { useDataState } from '../../hooks/use_data_state'; import { DocTableInfinite } from '../../../../components/doc_table/doc_table_infinite'; @@ -56,7 +55,6 @@ import { DISCOVER_TOUR_STEP_ANCHOR_IDS, DiscoverTourProvider, } from '../../../../components/discover_tour'; -import { getRawRecordType } from '../../utils/get_raw_record_type'; import { getMaxAllowedSampleSize, getAllowedSampleSize, @@ -68,6 +66,7 @@ import { SelectedVSAvailableCallout } from './selected_vs_available_callout'; import { useDiscoverCustomization } from '../../../../customizations'; import { onResizeGridColumn } from '../../../../utils/on_resize_grid_column'; import { useContextualGridCustomisations } from '../../hooks/grid_customisations'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; const containerStyles = css` position: relative; @@ -123,12 +122,12 @@ function DiscoverDocumentsComponent({ ]; }); const expandedDoc = useInternalStateSelector((state) => state.expandedDoc); - const isTextBasedQuery = useMemo(() => getRawRecordType(query) === RecordRawType.PLAIN, [query]); + const isEsqlMode = useIsEsqlMode(); const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); const hideAnnouncements = useMemo(() => uiSettings.get(HIDE_ANNOUNCEMENTS), [uiSettings]); const isLegacy = useMemo( - () => isLegacyTableEnabled({ uiSettings, isTextBasedQueryMode: isTextBasedQuery }), - [uiSettings, isTextBasedQuery] + () => isLegacyTableEnabled({ uiSettings, isEsqlMode }), + [uiSettings, isEsqlMode] ); const documentState = useDataState(documents$); const isDataLoading = @@ -136,7 +135,7 @@ function DiscoverDocumentsComponent({ documentState.fetchStatus === FetchStatus.PARTIAL; // This is needed to prevent EuiDataGrid pushing onSort because the data view has been switched. - // It's just necessary for non-text-based query lang requests since they don't have a partial result state, that's + // It's just necessary for non ES|QL requests since they don't have a partial result state, that's // considered as loading state in the Component. // 1. When switching the data view, the sorting in the URL is reset to the default sorting of the selected data view. // 2. The new sort param is already available in this component and propagated to the EuiDataGrid. @@ -145,13 +144,12 @@ function DiscoverDocumentsComponent({ // 5. this is propagated to Discover's URL and causes an unwanted change of state to an unsorted state // This solution switches to the loading state in this component when the URL index doesn't match the dataView.id const isDataViewLoading = - useInternalStateSelector((state) => state.isDataViewLoading) && !isTextBasedQuery; + useInternalStateSelector((state) => state.isDataViewLoading) && !isEsqlMode; const isEmptyDataResult = - isTextBasedQuery || !documentState.result || documentState.result.length === 0; + isEsqlMode || !documentState.result || documentState.result.length === 0; const rows = useMemo(() => documentState.result || [], [documentState.result]); const { isMoreDataLoading, totalHits, onFetchMoreRecords } = useFetchMoreRecords({ - isTextBasedQuery, stateContainer, }); @@ -227,10 +225,10 @@ function DiscoverDocumentsComponent({ const columnsMeta: DataTableColumnsMeta | undefined = useMemo( () => - documentState.textBasedQueryColumns - ? getTextBasedColumnsMeta(documentState.textBasedQueryColumns) + documentState.esqlQueryColumns + ? getTextBasedColumnsMeta(documentState.esqlQueryColumns) : undefined, - [documentState.textBasedQueryColumns] + [documentState.esqlQueryColumns] ); const renderDocumentView = useCallback( @@ -269,19 +267,13 @@ function DiscoverDocumentsComponent({ () => ( <> ), - [ - isTextBasedQuery, - currentColumns, - documents?.textBasedQueryColumns, - documentState.interceptedWarnings, - ] + [currentColumns, documents?.esqlQueryColumns, documentState.interceptedWarnings] ); const gridAnnouncementCallout = useMemo(() => { @@ -289,12 +281,12 @@ function DiscoverDocumentsComponent({ return null; } - return !isTextBasedQuery ? ( - + return !isEsqlMode ? ( + ) : null; - }, [hideAnnouncements, isLegacy, isTextBasedQuery]); + }, [hideAnnouncements, isLegacy, isEsqlMode]); const loadingIndicator = useMemo( () => @@ -364,12 +356,12 @@ function DiscoverDocumentsComponent({ isLoading={isDataLoading} searchDescription={savedSearch.description} sharedItemTitle={savedSearch.title} - isPlainRecord={isTextBasedQuery} + isEsqlMode={isEsqlMode} onAddColumn={onAddColumn} onFilter={onAddFilter as DocViewFilterFn} onMoveColumn={onMoveColumn} onRemoveColumn={onRemoveColumn} - onSort={!isTextBasedQuery ? onSort : undefined} + onSort={!isEsqlMode ? onSort : undefined} useNewFieldsApi={useNewFieldsApi} dataTestSubj="discoverDocTable" /> @@ -415,12 +407,12 @@ function DiscoverDocumentsComponent({ rowHeightState={rowHeight} onUpdateRowHeight={onUpdateRowHeight} isSortEnabled={true} - isPlainRecord={isTextBasedQuery} + isPlainRecord={isEsqlMode} rowsPerPageState={rowsPerPage ?? getDefaultRowsPerPage(services.uiSettings)} onUpdateRowsPerPage={onUpdateRowsPerPage} maxAllowedSampleSize={getMaxAllowedSampleSize(services.uiSettings)} sampleSizeState={getAllowedSampleSize(sampleSizeState, services.uiSettings)} - onUpdateSampleSize={!isTextBasedQuery ? onUpdateSampleSize : undefined} + onUpdateSampleSize={!isEsqlMode ? onUpdateSampleSize : undefined} onFieldEdited={onFieldEdited} configRowHeight={uiSettings.get(ROW_HEIGHT_OPTION)} showMultiFields={uiSettings.get(SHOW_MULTIFIELDS)} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx index 7ce8f987e59118..d23dfbe4359ebe 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx @@ -17,7 +17,6 @@ import { DataDocuments$, DataMain$, DataTotalHits$, - RecordRawType, } from '../../state_management/discover_data_state_container'; import { discoverServiceMock } from '../../../../__mocks__/services'; import { FetchStatus, SidebarToggleState } from '../../../types'; @@ -52,12 +51,12 @@ function getStateContainer(savedSearch?: SavedSearch) { } const mountComponent = async ({ - isPlainRecord = false, + isEsqlMode = false, storage, savedSearch = savedSearchMockWithTimeField, searchSessionId = '123', }: { - isPlainRecord?: boolean; + isEsqlMode?: boolean; isTimeBased?: boolean; storage?: Storage; savedSearch?: SavedSearch; @@ -86,7 +85,6 @@ const mountComponent = async ({ const main$ = new BehaviorSubject({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: isPlainRecord ? RecordRawType.PLAIN : RecordRawType.DOCUMENT, foundDocuments: true, }) as DataMain$; @@ -121,7 +119,6 @@ const mountComponent = async ({ stateContainer.actions.undoSavedSearchChanges = jest.fn(); const props: DiscoverHistogramLayoutProps = { - isPlainRecord, dataView, stateContainer, onFieldEdited: jest.fn(), @@ -176,8 +173,8 @@ describe('Discover histogram layout component', () => { expect(component.isEmptyRender()).toBe(false); }, 10000); - it('should not render null if there is no search session, but isPlainRecord is true', async () => { - const { component } = await mountComponent({ isPlainRecord: true }); + it('should not render null if there is no search session, but isEsqlMode is true', async () => { + const { component } = await mountComponent({ isEsqlMode: true }); expect(component.isEmptyRender()).toBe(false); }); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx index 207a2263b0e065..68585d7faf5c0d 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx @@ -15,6 +15,7 @@ import { useDiscoverHistogram } from './use_discover_histogram'; import { type DiscoverMainContentProps, DiscoverMainContent } from './discover_main_content'; import { useAppStateSelector } from '../../state_management/discover_app_state_container'; import { FetchStatus } from '../../../types'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; export interface DiscoverHistogramLayoutProps extends DiscoverMainContentProps { container: HTMLElement | null; @@ -25,7 +26,6 @@ const histogramLayoutCss = css` `; export const DiscoverHistogramLayout = ({ - isPlainRecord, dataView, stateContainer, container, @@ -35,11 +35,11 @@ export const DiscoverHistogramLayout = ({ const { dataState } = stateContainer; const searchSessionId = useObservable(stateContainer.searchSessionManager.searchSessionId$); const hideChart = useAppStateSelector((state) => state.hideChart); + const isEsqlMode = useIsEsqlMode(); const unifiedHistogramProps = useDiscoverHistogram({ stateContainer, inspectorAdapters: dataState.inspectorAdapters, hideChart, - isPlainRecord, }); const datatable = useObservable(dataState.data$.documents$); @@ -53,21 +53,21 @@ export const DiscoverHistogramLayout = ({ const table: Datatable | undefined = useMemo(() => { if ( - isPlainRecord && + isEsqlMode && datatable && [FetchStatus.PARTIAL, FetchStatus.COMPLETE].includes(datatable.fetchStatus) ) { return { type: 'datatable' as 'datatable', rows: datatable.result!.map((r) => r.raw), - columns: datatable.textBasedQueryColumns || [], + columns: datatable.esqlQueryColumns || [], }; } - }, [datatable, isPlainRecord]); + }, [datatable, isEsqlMode]); // Initialized when the first search has been requested or - // when in text-based mode since search sessions are not supported - if (!searchSessionId && !isPlainRecord) { + // when in ES|QL mode since search sessions are not supported + if (!searchSessionId && !isEsqlMode) { return null; } @@ -86,7 +86,6 @@ export const DiscoverHistogramLayout = ({ {...mainContentProps} stateContainer={stateContainer} dataView={dataView} - isPlainRecord={isPlainRecord} panelsToggle={panelsToggle} /> diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx index c1cc257f58cc3e..cf3fd26a10d668 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx @@ -25,7 +25,6 @@ import { DataDocuments$, DataMain$, DataTotalHits$, - RecordRawType, } from '../../state_management/discover_data_state_container'; import { createDiscoverServicesMock } from '../../../../__mocks__/services'; import { FetchStatus } from '../../../types'; @@ -51,10 +50,8 @@ async function mountComponent( prevSidebarClosed?: boolean, mountOptions: { attachTo?: HTMLElement } = {}, query?: Query | AggregateQuery, - isPlainRecord?: boolean, main$: DataMain$ = new BehaviorSubject({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: isPlainRecord ? RecordRawType.PLAIN : RecordRawType.DOCUMENT, foundDocuments: true, }) as DataMain$ ) { @@ -185,10 +182,8 @@ describe('Discover component', () => { undefined, undefined, undefined, - undefined, new BehaviorSubject({ fetchStatus: FetchStatus.ERROR, - recordRawType: RecordRawType.DOCUMENT, foundDocuments: false, error: new Error('No results'), }) as DataMain$ diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 0a7524ef8bddf5..cc141ce3fd5671 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import './discover_layout.scss'; import React, { ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { @@ -23,7 +24,7 @@ import { METRIC_TYPE } from '@kbn/analytics'; import classNames from 'classnames'; import { generateFilters } from '@kbn/data-plugin/public'; import { useDragDropContext } from '@kbn/dom-drag-drop'; -import { DataViewField, DataViewType } from '@kbn/data-views-plugin/public'; +import { DataViewType } from '@kbn/data-views-plugin/public'; import { SEARCH_FIELDS_FROM_SOURCE, SHOW_FIELD_STATISTICS, @@ -44,10 +45,9 @@ import { DiscoverSidebarResponsive } from '../sidebar'; import { DiscoverTopNav } from '../top_nav/discover_topnav'; import { getResultState } from '../../utils/get_result_state'; import { DiscoverUninitialized } from '../uninitialized/uninitialized'; -import { DataMainMsg, RecordRawType } from '../../state_management/discover_data_state_container'; +import { DataMainMsg } from '../../state_management/discover_data_state_container'; import { FetchStatus, SidebarToggleState } from '../../../types'; import { useDataState } from '../../hooks/use_data_state'; -import { getRawRecordType } from '../../utils/get_raw_record_type'; import { SavedSearchURLConflictCallout } from '../../../../components/saved_search_url_conflict_callout/saved_search_url_conflict_callout'; import { DiscoverHistogramLayout } from './discover_histogram_layout'; import { ErrorCallout } from '../../../../components/common/error_callout'; @@ -55,6 +55,7 @@ import { addLog } from '../../../../utils/add_log'; import { DiscoverResizableLayout } from './discover_resizable_layout'; import { PanelsToggle, PanelsToggleProps } from '../../../../components/panels_toggle'; import { sendErrorMsg } from '../../hooks/use_saved_search_messages'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; const SidebarMemoized = React.memo(DiscoverSidebarResponsive); const TopNavMemoized = React.memo(DiscoverTopNav); @@ -84,9 +85,9 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { state.columns, state.sort, ]); - const isPlainRecord = useMemo(() => getRawRecordType(query) === RecordRawType.PLAIN, [query]); + const isEsqlMode = useIsEsqlMode(); const viewMode: VIEW_MODE = useAppStateSelector((state) => { - if (uiSettings.get(SHOW_FIELD_STATISTICS) !== true || isPlainRecord) + if (uiSettings.get(SHOW_FIELD_STATISTICS) !== true || isEsqlMode) return VIEW_MODE.DOCUMENT_LEVEL; return state.viewMode ?? VIEW_MODE.DOCUMENT_LEVEL; }); @@ -140,13 +141,16 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { useEffect(() => { return observabilityAIAssistant?.service.setScreenContext({ screenDescription: `The user is looking at the Discover view on the ${ - isPlainRecord ? 'ES|QL' : 'dataView' + isEsqlMode ? 'ES|QL' : 'dataView' } mode. The index pattern is the ${dataView.getIndexPattern()}`, }); - }, [dataView, isPlainRecord, observabilityAIAssistant?.service]); + }, [dataView, isEsqlMode, observabilityAIAssistant?.service]); - const onAddFilter = useCallback( - (field: DataViewField | string, values: unknown, operation: '+' | '-') => { + const onAddFilter = useCallback( + (field, values, operation) => { + if (!field) { + return; + } const fieldName = typeof field === 'string' ? field : field.name; popularizeField(dataView, fieldName, dataViews, capabilities); const newFilters = generateFilters(filterManager, field, values, operation, dataView); @@ -173,36 +177,35 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { return operation; }; - const onPopulateWhereClause = useCallback( - (field: DataViewField | string, values: unknown, operation: '+' | '-') => { - if (query && isOfAggregateQueryType(query) && 'esql' in query) { - const fieldName = typeof field === 'string' ? field : field.name; - // send the field type for casting - const fieldType = typeof field !== 'string' ? field.type : undefined; - // weird existence logic from Discover components - // in the field it comes the operator _exists_ and in the value the field - // I need to take care of it here but I think it should be handled on the fieldlist instead - const updatedQuery = appendWhereClauseToESQLQuery( - query.esql, - fieldName === '_exists_' ? String(values) : fieldName, - fieldName === '_exists_' || values == null ? undefined : values, - getOperator(fieldName, values, operation), - fieldType - ); - data.query.queryString.setQuery({ - esql: updatedQuery, - }); - if (trackUiMetric) { - trackUiMetric(METRIC_TYPE.CLICK, 'esql_filter_added'); - } + const onPopulateWhereClause = useCallback( + (field, values, operation) => { + if (!field || !isOfAggregateQueryType(query)) { + return; + } + const fieldName = typeof field === 'string' ? field : field.name; + // send the field type for casting + const fieldType = typeof field !== 'string' ? field.type : undefined; + // weird existence logic from Discover components + // in the field it comes the operator _exists_ and in the value the field + // I need to take care of it here but I think it should be handled on the fieldlist instead + const updatedQuery = appendWhereClauseToESQLQuery( + query.esql, + fieldName === '_exists_' ? String(values) : fieldName, + fieldName === '_exists_' || values == null ? undefined : values, + getOperator(fieldName, values, operation), + fieldType + ); + data.query.queryString.setQuery({ + esql: updatedQuery, + }); + if (trackUiMetric) { + trackUiMetric(METRIC_TYPE.CLICK, 'esql_filter_added'); } }, [data.query.queryString, query, trackUiMetric] ); - const onFilter = isPlainRecord - ? (onPopulateWhereClause as DocViewFilterFn) - : (onAddFilter as DocViewFilterFn); + const onFilter = isEsqlMode ? onPopulateWhereClause : onAddFilter; const onFieldEdited = useCallback( async ({ removedFieldName }: { removedFieldName?: string } = {}) => { @@ -227,17 +230,17 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { const contentCentered = resultState === 'uninitialized' || resultState === 'none'; const documentState = useDataState(stateContainer.dataState.data$.documents$); - const textBasedLanguageModeWarning = useMemo(() => { - if (isPlainRecord) { - return documentState.textBasedHeaderWarning; + const esqlModeWarning = useMemo(() => { + if (isEsqlMode) { + return documentState.esqlHeaderWarning; } - }, [documentState.textBasedHeaderWarning, isPlainRecord]); + }, [documentState.esqlHeaderWarning, isEsqlMode]); - const textBasedLanguageModeErrors = useMemo(() => { - if (isPlainRecord) { + const esqlModeErrors = useMemo(() => { + if (isEsqlMode) { return dataState.error; } - }, [dataState.error, isPlainRecord]); + }, [dataState.error, isEsqlMode]); const [sidebarContainer, setSidebarContainer] = useState(null); const [mainContainer, setMainContainer] = useState(null); @@ -277,7 +280,6 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { return ( <> { describe('DocumentViewModeToggle', () => { - it('should show DocumentViewModeToggle when isPlainRecord is false', async () => { + it('should show DocumentViewModeToggle when not in ES|QL mode', async () => { const component = await mountComponent(); expect(component.find(DiscoverDocuments).prop('viewModeToggle')).toBeDefined(); }); - it('should include DocumentViewModeToggle when isPlainRecord is true', async () => { - const component = await mountComponent({ isPlainRecord: true }); + it('should include DocumentViewModeToggle when in ES|QL mode', async () => { + const component = await mountComponent({ isEsqlMode: true }); expect(component.find(DiscoverDocuments).prop('viewModeToggle')).toBeDefined(); }); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx index 701bbdddb6e931..23e4001a394599 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx @@ -22,6 +22,7 @@ import { DiscoverDocuments } from './discover_documents'; import { DOCUMENTS_VIEW_CLICK, FIELD_STATISTICS_VIEW_CLICK } from '../field_stats_table/constants'; import { useAppStateSelector } from '../../state_management/discover_app_state_container'; import type { PanelsToggleProps } from '../../../../components/panels_toggle'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; const DROP_PROPS = { value: { @@ -38,7 +39,6 @@ const DROP_PROPS = { export interface DiscoverMainContentProps { dataView: DataView; - isPlainRecord: boolean; stateContainer: DiscoverStateContainer; viewMode: VIEW_MODE; onAddFilter: DocViewFilterFn | undefined; @@ -51,7 +51,6 @@ export interface DiscoverMainContentProps { export const DiscoverMainContent = ({ dataView, - isPlainRecord, viewMode, onAddFilter, onFieldEdited, @@ -62,7 +61,7 @@ export const DiscoverMainContent = ({ isChartAvailable, }: DiscoverMainContentProps) => { const { trackUiMetric, dataVisualizer: dataVisualizerService } = useDiscoverServices(); - + const isEsqlMode = useIsEsqlMode(); const shouldShowViewModeToggle = dataVisualizerService !== undefined; const setDiscoverViewMode = useCallback( @@ -86,7 +85,7 @@ export const DiscoverMainContent = ({ return shouldShowViewModeToggle ? ( ); }, [ + shouldShowViewModeToggle, viewMode, - setDiscoverViewMode, - isPlainRecord, + isEsqlMode, stateContainer, + setDiscoverViewMode, panelsToggle, isChartAvailable, - shouldShowViewModeToggle, ]); const showChart = useAppStateSelector((state) => !state.hideChart); @@ -132,7 +131,7 @@ export const DiscoverMainContent = ({ dataView={dataView} onAddFilter={onAddFilter} stateContainer={stateContainer} - onFieldEdited={!isPlainRecord ? onFieldEdited : undefined} + onFieldEdited={!isEsqlMode ? onFieldEdited : undefined} /> ) : ( <> @@ -141,7 +140,7 @@ export const DiscoverMainContent = ({ dataView={dataView} columns={columns} stateContainer={stateContainer} - onAddFilter={!isPlainRecord ? onAddFilter : undefined} + onAddFilter={!isEsqlMode ? onAddFilter : undefined} trackUiMetric={trackUiMetric} /> diff --git a/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.test.tsx b/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.test.tsx index 4b6b2da23b2c23..b48d12d511abbb 100644 --- a/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.test.tsx @@ -10,45 +10,49 @@ import React from 'react'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import { SelectedVSAvailableCallout } from './selected_vs_available_callout'; +import { DiscoverMainProvider } from '../../state_management/discover_state_provider'; +import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; describe('SelectedVSAvailableCallout', () => { - it('should render the callout if isPlainRecord is true and the selected columns are less than the available ones', async () => { + it('should render the callout if in ES|QL mode and the selected columns are less than the available ones', async () => { + const stateContainer = getDiscoverStateMock({}); + stateContainer.appState.update({ query: { esql: 'select *' } }); const component = mountWithIntl( - + + + ); expect(component.find('[data-test-subj="dscSelectedColumnsCallout"]').exists()).toBe(true); }); - it('should not render the callout if isPlainRecord is false', async () => { + it('should not render the callout if not in ES|QL mode', async () => { const component = mountWithIntl( - + + + ); expect(component.find('[data-test-subj="dscSelectedColumnsCallout"]').exists()).toBe(false); }); - it('should not render the callout if isPlainRecord is true but the selected columns are equal with the available ones', async () => { + it('should not render the callout if in ES|QL mode but the selected columns are equal with the available ones', async () => { const component = mountWithIntl( - + + + ); expect(component.find('[data-test-subj="dscSelectedColumnsCallout"]').exists()).toBe(false); }); diff --git a/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.tsx b/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.tsx index ec05667e69b354..948f4cf27a50e3 100644 --- a/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/selected_vs_available_callout.tsx @@ -9,33 +9,34 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiCallOut } from '@elastic/eui'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; interface SelectedVSAvailableCallout { - isPlainRecord: boolean; selectedColumns: string[]; - textBasedQueryColumns?: DatatableColumn[]; + esqlQueryColumns?: DatatableColumn[]; } export const SelectedVSAvailableCallout = ({ - isPlainRecord, - textBasedQueryColumns, + esqlQueryColumns, selectedColumns, }: SelectedVSAvailableCallout) => { + const isEsqlMode = useIsEsqlMode(); + return ( <> - {isPlainRecord && - textBasedQueryColumns && + {isEsqlMode && + esqlQueryColumns && selectedColumns.length > 0 && - selectedColumns.length < textBasedQueryColumns.length && ( + selectedColumns.length < esqlQueryColumns.length && ( { stateContainer = getStateContainer(), inspectorAdapters = { requests: new RequestAdapter() }, hideChart = false, - isPlainRecord = false, }: { stateContainer?: DiscoverStateContainer; inspectorAdapters?: InspectorAdapters; hideChart?: boolean; - isPlainRecord?: boolean; } = {}) => { const initialProps = { stateContainer, inspectorAdapters, hideChart, - isPlainRecord, }; const Wrapper: WrapperComponent = ({ children }) => ( @@ -174,8 +171,10 @@ describe('useDiscoverHistogram', () => { ]); }); - it('should return the isChartLoading params for text based languages', async () => { - const { hook } = await renderUseDiscoverHistogram({ isPlainRecord: true }); + it('should return the isChartLoading params for ES|QL mode', async () => { + const stateContainer = getStateContainer(); + stateContainer.appState.update({ query: { esql: 'from *' } }); + const { hook } = await renderUseDiscoverHistogram(); const isChartLoading = hook.result.current.isChartLoading; expect(isChartLoading).toBe(false); }); @@ -323,7 +322,6 @@ describe('useDiscoverHistogram', () => { expect(stateContainer.dataState.data$.totalHits$.value).not.toEqual({ fetchStatus: FetchStatus.COMPLETE, result: 100, - recordRawType: stateContainer.dataState.data$.totalHits$.value.recordRawType, }); act(() => { hook.result.current.ref(api); @@ -331,7 +329,6 @@ describe('useDiscoverHistogram', () => { expect(stateContainer.dataState.data$.totalHits$.value).toEqual({ fetchStatus: FetchStatus.COMPLETE, result: 100, - recordRawType: stateContainer.dataState.data$.totalHits$.value.recordRawType, }); expect(mockCheckHitCount).toHaveBeenCalledWith(stateContainer.dataState.data$.main$, 100); }); @@ -370,7 +367,6 @@ describe('useDiscoverHistogram', () => { expect(stateContainer.dataState.data$.totalHits$.value).not.toEqual({ fetchStatus: FetchStatus.ERROR, error, - recordRawType: stateContainer.dataState.data$.totalHits$.value.recordRawType, }); act(() => { hook.result.current.ref(api); @@ -379,7 +375,6 @@ describe('useDiscoverHistogram', () => { expect(stateContainer.dataState.data$.totalHits$.value).toEqual({ fetchStatus: FetchStatus.ERROR, error, - recordRawType: stateContainer.dataState.data$.totalHits$.value.recordRawType, }); expect(mockCheckHitCount).not.toHaveBeenCalled(); }); @@ -393,8 +388,9 @@ describe('useDiscoverHistogram', () => { searchSessionId: string; }>(); const stateContainer = getStateContainer(); + stateContainer.appState.update({ query: { esql: 'from *' } }); stateContainer.dataState.fetch$ = fetch$; - const { hook } = await renderUseDiscoverHistogram({ stateContainer, isPlainRecord: true }); + const { hook } = await renderUseDiscoverHistogram({ stateContainer }); act(() => { fetch$.next({ options: { reset: false, fetchMore: false }, diff --git a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts index bf5fbafa957946..385dd432dc3c11 100644 --- a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts +++ b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts @@ -31,7 +31,7 @@ import useObservable from 'react-use/lib/useObservable'; import type { RequestAdapter } from '@kbn/inspector-plugin/common'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import type { SavedSearch } from '@kbn/saved-search-plugin/common'; -import type { Filter } from '@kbn/es-query'; +import { Filter } from '@kbn/es-query'; import { useDiscoverCustomization } from '../../../../customizations'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { FetchStatus } from '../../../types'; @@ -41,31 +41,28 @@ import type { DiscoverStateContainer } from '../../state_management/discover_sta import { addLog } from '../../../../utils/add_log'; import { useInternalStateSelector } from '../../state_management/discover_internal_state_container'; import type { DiscoverAppState } from '../../state_management/discover_app_state_container'; -import { - DataDocumentsMsg, - RecordRawType, -} from '../../state_management/discover_data_state_container'; +import { DataDocumentsMsg } from '../../state_management/discover_data_state_container'; import { useSavedSearch } from '../../state_management/discover_state_provider'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; -const EMPTY_TEXT_BASED_COLUMNS: DatatableColumn[] = []; +const EMPTY_ESQL_COLUMNS: DatatableColumn[] = []; const EMPTY_FILTERS: Filter[] = []; export interface UseDiscoverHistogramProps { stateContainer: DiscoverStateContainer; inspectorAdapters: InspectorAdapters; hideChart: boolean | undefined; - isPlainRecord: boolean; } export const useDiscoverHistogram = ({ stateContainer, inspectorAdapters, hideChart, - isPlainRecord, }: UseDiscoverHistogramProps) => { const services = useDiscoverServices(); const savedSearchData$ = stateContainer.dataState.data$; const savedSearchState = useSavedSearch(); + const isEsqlMode = useIsEsqlMode(); /** * API initialization @@ -163,10 +160,8 @@ export const useDiscoverHistogram = ({ useEffect(() => { const subscription = createTotalHitsObservable(unifiedHistogram?.state$)?.subscribe( ({ status, result }) => { - const { recordRawType, result: totalHitsResult } = savedSearchData$.totalHits$.getValue(); - - if (recordRawType === RecordRawType.PLAIN) { - // ignore histogram's total hits updates for text-based records as Discover manages them during docs fetching + if (isEsqlMode) { + // ignore histogram's total hits updates for ES|QL as Discover manages them during docs fetching return; } @@ -176,6 +171,8 @@ export const useDiscoverHistogram = ({ return; } + const { result: totalHitsResult } = savedSearchData$.totalHits$.getValue(); + if ( (status === UnifiedHistogramFetchStatus.loading || status === UnifiedHistogramFetchStatus.uninitialized) && @@ -190,7 +187,6 @@ export const useDiscoverHistogram = ({ savedSearchData$.totalHits$.next({ fetchStatus: status.toString() as FetchStatus, result, - recordRawType, }); if (status !== UnifiedHistogramFetchStatus.complete || typeof result !== 'number') { @@ -206,9 +202,11 @@ export const useDiscoverHistogram = ({ subscription?.unsubscribe(); }; }, [ + isEsqlMode, savedSearchData$.main$, savedSearchData$.totalHits$, setTotalHitsError, + stateContainer.appState, unifiedHistogram?.state$, ]); @@ -224,30 +222,30 @@ export const useDiscoverHistogram = ({ timefilter.getTime() ); - // When in text based language mode, update the data view, query, and + // When in ES|QL mode, update the data view, query, and // columns only when documents are done fetching so the Lens suggestions // don't frequently change, such as when the user modifies the table // columns, which would trigger unnecessary refetches. - const textBasedFetchComplete$ = useMemo( + const esqlFetchComplete$ = useMemo( () => createFetchCompleteObservable(stateContainer), [stateContainer] ); - const [initialTextBasedProps] = useState(() => - getUnifiedHistogramPropsForTextBased({ + const [initialEsqlProps] = useState(() => + getUnifiedHistogramPropsForEsql({ documentsValue: savedSearchData$.documents$.getValue(), savedSearch: stateContainer.savedSearchState.getState(), }) ); const { - dataView: textBasedDataView, - query: textBasedQuery, - columns: textBasedColumns, - } = useObservable(textBasedFetchComplete$, initialTextBasedProps); + dataView: esqlDataView, + query: esqlQuery, + columns: esqlColumns, + } = useObservable(esqlFetchComplete$, initialEsqlProps); useEffect(() => { - if (!isPlainRecord) { + if (!isEsqlMode) { return; } @@ -256,7 +254,7 @@ export const useDiscoverHistogram = ({ setIsSuggestionLoading(true); } }); - const fetchComplete = textBasedFetchComplete$.subscribe(() => { + const fetchComplete = esqlFetchComplete$.subscribe(() => { setIsSuggestionLoading(false); }); @@ -264,7 +262,7 @@ export const useDiscoverHistogram = ({ fetchStart.unsubscribe(); fetchComplete.unsubscribe(); }; - }, [isPlainRecord, stateContainer.dataState.fetch$, textBasedFetchComplete$]); + }, [isEsqlMode, stateContainer.dataState.fetch$, esqlFetchComplete$]); /** * Data fetching @@ -290,17 +288,17 @@ export const useDiscoverHistogram = ({ let fetch$: Observable; - // When in text based language mode, we refetch under two conditions: + // When in ES|QL mode, we refetch under two conditions: // 1. When the current Lens suggestion changes. This syncs the visualization // with the user's selection. // 2. When the documents are done fetching. This is necessary because we don't // have access to the latest columns until after the documents are fetched, // which are required to get the latest Lens suggestion, which would trigger // a refetch anyway and result in multiple unnecessary fetches. - if (isPlainRecord) { + if (isEsqlMode) { fetch$ = merge( createCurrentSuggestionObservable(unifiedHistogram.state$).pipe(map(() => 'lens')), - textBasedFetchComplete$.pipe(map(() => 'discover')) + esqlFetchComplete$.pipe(map(() => 'discover')) ).pipe(debounceTime(50)); } else { fetch$ = stateContainer.dataState.fetch$.pipe( @@ -320,14 +318,14 @@ export const useDiscoverHistogram = ({ }); // triggering the initial request for total hits hook - if (!isPlainRecord && !skipRefetch.current) { + if (!isEsqlMode && !skipRefetch.current) { unifiedHistogram.refetch(); } return () => { subscription.unsubscribe(); }; - }, [isPlainRecord, stateContainer.dataState.fetch$, textBasedFetchComplete$, unifiedHistogram]); + }, [isEsqlMode, stateContainer.dataState.fetch$, esqlFetchComplete$, unifiedHistogram]); const dataView = useInternalStateSelector((state) => state.dataView!); @@ -384,12 +382,12 @@ export const useDiscoverHistogram = ({ ref, getCreationOptions, services, - dataView: isPlainRecord ? textBasedDataView : dataView, - query: isPlainRecord ? textBasedQuery : query, + dataView: isEsqlMode ? esqlDataView : dataView, + query: isEsqlMode ? esqlQuery : query, filters: filtersMemoized, timeRange: timeRangeMemoized, relativeTimeRange, - columns: isPlainRecord ? textBasedColumns : undefined, + columns: isEsqlMode ? esqlColumns : undefined, onFilter: histogramCustomization?.onFilter, onBrushEnd: histogramCustomization?.onBrushEnd, withDefaultActions: histogramCustomization?.withDefaultActions, @@ -397,10 +395,10 @@ export const useDiscoverHistogram = ({ isChartLoading: isSuggestionLoading, // visContext should be in sync with current query externalVisContext: - isPlainRecord && canImportVisContext(savedSearchState?.visContext) + isEsqlMode && canImportVisContext(savedSearchState?.visContext) ? savedSearchState?.visContext : undefined, - onVisContextChanged: isPlainRecord ? onVisContextChanged : undefined, + onVisContextChanged: isEsqlMode ? onVisContextChanged : undefined, }; }; @@ -476,7 +474,7 @@ const createFetchCompleteObservable = (stateContainer: DiscoverStateContainer) = distinctUntilChanged((prev, curr) => prev.fetchStatus === curr.fetchStatus), filter(({ fetchStatus }) => [FetchStatus.COMPLETE, FetchStatus.ERROR].includes(fetchStatus)), map((documentsValue) => { - return getUnifiedHistogramPropsForTextBased({ + return getUnifiedHistogramPropsForEsql({ documentsValue, savedSearch: stateContainer.savedSearchState.getState(), }); @@ -498,14 +496,14 @@ const createCurrentSuggestionObservable = (state$: Observable { const records = esHitsMockWithSort.map((hit) => buildDataTableRecord(hit, dataViewMock)); @@ -43,18 +46,27 @@ describe('useFetchMoreRecords', () => { return stateContainer; }; + const getWrapper = ( + stateContainer: DiscoverStateContainer + ): WrapperComponent => { + return ({ children }) => ( + + <>{children} + + ); + }; + it('should not be allowed if all records are already loaded', async () => { + const stateContainer = getStateContainer({ + fetchStatus: FetchStatus.COMPLETE, + loadedRecordsCount: 3, + totalRecordsCount: 3, + }); const { result: { current }, } = renderHook((props) => useFetchMoreRecords(props), { - initialProps: { - isTextBasedQuery: false, - stateContainer: getStateContainer({ - fetchStatus: FetchStatus.COMPLETE, - loadedRecordsCount: 3, - totalRecordsCount: 3, - }), - }, + wrapper: getWrapper(stateContainer), + initialProps: { stateContainer }, }); expect(current.onFetchMoreRecords).toBeUndefined(); @@ -63,17 +75,16 @@ describe('useFetchMoreRecords', () => { }); it('should be allowed when there are more records to load', async () => { + const stateContainer = getStateContainer({ + fetchStatus: FetchStatus.COMPLETE, + loadedRecordsCount: 3, + totalRecordsCount: 5, + }); const { result: { current }, } = renderHook((props) => useFetchMoreRecords(props), { - initialProps: { - isTextBasedQuery: false, - stateContainer: getStateContainer({ - fetchStatus: FetchStatus.COMPLETE, - loadedRecordsCount: 3, - totalRecordsCount: 5, - }), - }, + wrapper: getWrapper(stateContainer), + initialProps: { stateContainer }, }); expect(current.onFetchMoreRecords).toBeDefined(); expect(current.isMoreDataLoading).toBe(false); @@ -81,17 +92,16 @@ describe('useFetchMoreRecords', () => { }); it('should not be allowed when there is no initial documents', async () => { + const stateContainer = getStateContainer({ + fetchStatus: FetchStatus.COMPLETE, + loadedRecordsCount: 0, + totalRecordsCount: 5, + }); const { result: { current }, } = renderHook((props) => useFetchMoreRecords(props), { - initialProps: { - isTextBasedQuery: false, - stateContainer: getStateContainer({ - fetchStatus: FetchStatus.COMPLETE, - loadedRecordsCount: 0, - totalRecordsCount: 5, - }), - }, + wrapper: getWrapper(stateContainer), + initialProps: { stateContainer }, }); expect(current.onFetchMoreRecords).toBeUndefined(); expect(current.isMoreDataLoading).toBe(false); @@ -99,35 +109,34 @@ describe('useFetchMoreRecords', () => { }); it('should return loading status correctly', async () => { + const stateContainer = getStateContainer({ + fetchStatus: FetchStatus.LOADING_MORE, + loadedRecordsCount: 3, + totalRecordsCount: 5, + }); const { result: { current }, } = renderHook((props) => useFetchMoreRecords(props), { - initialProps: { - isTextBasedQuery: false, - stateContainer: getStateContainer({ - fetchStatus: FetchStatus.LOADING_MORE, - loadedRecordsCount: 3, - totalRecordsCount: 5, - }), - }, + wrapper: getWrapper(stateContainer), + initialProps: { stateContainer }, }); expect(current.onFetchMoreRecords).toBeDefined(); expect(current.isMoreDataLoading).toBe(true); expect(current.totalHits).toBe(5); }); - it('should not be allowed for text-based queries', async () => { + it('should not be allowed for ES|QL queries', async () => { + const stateContainer = getStateContainer({ + fetchStatus: FetchStatus.COMPLETE, + loadedRecordsCount: 3, + totalRecordsCount: 5, + }); + stateContainer.appState.update({ query: { esql: 'from *' } }); const { result: { current }, } = renderHook((props) => useFetchMoreRecords(props), { - initialProps: { - isTextBasedQuery: true, - stateContainer: getStateContainer({ - fetchStatus: FetchStatus.COMPLETE, - loadedRecordsCount: 3, - totalRecordsCount: 5, - }), - }, + wrapper: getWrapper(stateContainer), + initialProps: { stateContainer }, }); expect(current.onFetchMoreRecords).toBeUndefined(); }); diff --git a/src/plugins/discover/public/application/main/components/layout/use_fetch_more_records.ts b/src/plugins/discover/public/application/main/components/layout/use_fetch_more_records.ts index 381ded3fc17d79..b6901c4f29369a 100644 --- a/src/plugins/discover/public/application/main/components/layout/use_fetch_more_records.ts +++ b/src/plugins/discover/public/application/main/components/layout/use_fetch_more_records.ts @@ -9,13 +9,13 @@ import { useMemo } from 'react'; import { FetchStatus } from '../../../types'; import { useDataState } from '../../hooks/use_data_state'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; import type { DiscoverStateContainer } from '../../state_management/discover_state'; /** * Params for the hook */ export interface UseFetchMoreRecordsParams { - isTextBasedQuery: boolean; stateContainer: DiscoverStateContainer; } @@ -30,24 +30,23 @@ export interface UseFetchMoreRecordsResult { /** * Checks if more records can be loaded and returns a handler for it - * @param isTextBasedQuery * @param stateContainer */ export const useFetchMoreRecords = ({ - isTextBasedQuery, stateContainer, }: UseFetchMoreRecordsParams): UseFetchMoreRecordsResult => { const documents$ = stateContainer.dataState.data$.documents$; const totalHits$ = stateContainer.dataState.data$.totalHits$; const documentState = useDataState(documents$); const totalHitsState = useDataState(totalHits$); + const isEsqlMode = useIsEsqlMode(); const rows = documentState.result || []; const isMoreDataLoading = documentState.fetchStatus === FetchStatus.LOADING_MORE; const totalHits = totalHitsState.result || 0; const canFetchMoreRecords = - !isTextBasedQuery && + !isEsqlMode && rows.length > 0 && totalHits > rows.length && Boolean(rows[rows.length - 1].raw.sort?.length); diff --git a/src/plugins/discover/public/application/main/components/no_results/no_results.test.tsx b/src/plugins/discover/public/application/main/components/no_results/no_results.test.tsx index d88eda61d7db09..d1079c5bddf1fb 100644 --- a/src/plugins/discover/public/application/main/components/no_results/no_results.test.tsx +++ b/src/plugins/discover/public/application/main/components/no_results/no_results.test.tsx @@ -21,6 +21,7 @@ import { type Filter } from '@kbn/es-query'; import { DiscoverNoResults, DiscoverNoResultsProps } from './no_results'; import { createDiscoverServicesMock } from '../../../../__mocks__/services'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; +import { DiscoverMainProvider } from '../../state_management/discover_state_provider'; jest.spyOn(RxApi, 'lastValueFrom').mockImplementation(async () => ({ rawResponse: { @@ -61,25 +62,28 @@ async function mountAndFindSubjects( > ) { const isTimeBased = props.dataView.isTimeBased(); + const stateContainer = getDiscoverStateMock({ isTimeBased }); let component: ReactWrapper; - await act(async () => { - component = await mountWithIntl( + act(() => { + component = mountWithIntl( - {}} - {...props} - /> + + {}} + {...props} + /> + ); }); await new Promise((resolve) => setTimeout(resolve, 0)); - await act(async () => { - await component!.update(); + act(() => { + component!.update(); }); return { diff --git a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx index f75376d6ad32cd..fa679fa00ecefb 100644 --- a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx +++ b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx @@ -10,16 +10,9 @@ import React, { useCallback, useState } from 'react'; import { css } from '@emotion/react'; import { EuiEmptyPrompt, EuiButton, EuiSpacer, useEuiTheme } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/common'; -import { - isOfQueryType, - isOfAggregateQueryType, - type Query, - type AggregateQuery, - type Filter, -} from '@kbn/es-query'; +import { isOfQueryType, type Query, type AggregateQuery, type Filter } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import { isTextBasedQuery } from '../../../utils/is_text_based_query'; import { NoResultsSuggestionDefault } from './no_results_suggestion_default'; import { NoResultsSuggestionWhenFilters, @@ -31,6 +24,7 @@ import { hasActiveFilter } from '../../layout/utils'; import { useDiscoverServices } from '../../../../../hooks/use_discover_services'; import { useFetchOccurrencesRange, TimeRangeExtendingStatus } from './use_fetch_occurances_range'; import { NoResultsIllustration } from './assets/no_results_illustration'; +import { useIsEsqlMode } from '../../../hooks/use_is_esql_mode'; interface NoResultsSuggestionProps { dataView: DataView; @@ -50,8 +44,8 @@ export const NoResultsSuggestions: React.FC = ({ const { euiTheme } = useEuiTheme(); const services = useDiscoverServices(); const { data, uiSettings, timefilter, toastNotifications } = services; - const hasQuery = - (isOfQueryType(query) && !!query?.query) || (!!query && isOfAggregateQueryType(query)); + const isEsqlMode = useIsEsqlMode(); + const hasQuery = Boolean(isOfQueryType(query) && query.query) || isEsqlMode; const hasFilters = hasActiveFilter(filters); const [timeRangeExtendingStatus, setTimeRangeExtendingStatus] = @@ -148,7 +142,7 @@ export const NoResultsSuggestions: React.FC = ({ } body={body} actions={ - !isTextBasedQuery(query) && isTimeBased ? ( + !isEsqlMode && isTimeBased ? (
{ - const propsWithTextBasedMode = { + const propsWithEsqlMode = { ...props, columns: ['extension', 'bytes'], onAddFilter: undefined, documents$: new BehaviorSubject({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.PLAIN, result: getDataTableRecords(stubLogstashDataView), - textBasedQueryColumns: [ + esqlQueryColumns: [ { id: '1', name: 'extension', meta: { type: 'text' } }, { id: '2', name: 'bytes', meta: { type: 'number' } }, { id: '3', name: '@timestamp', meta: { type: 'date' } }, ], }) as DataDocuments$, }; - const compInTextBasedMode = await mountComponent(propsWithTextBasedMode, { + const compInEsqlMode = await mountComponent(propsWithEsqlMode, { query: { esql: 'FROM `index`' }, }); await act(async () => { await new Promise((resolve) => setTimeout(resolve, 0)); - compInTextBasedMode.update(); + compInEsqlMode.update(); }); - expect(findTestSubject(compInTextBasedMode, 'indexPattern-add-field_btn').length).toBe(0); + expect(findTestSubject(compInEsqlMode, 'indexPattern-add-field_btn').length).toBe(0); const popularFieldsCount = findTestSubject( - compInTextBasedMode, + compInEsqlMode, 'fieldListGroupedPopularFields-count' ); const selectedFieldsCount = findTestSubject( - compInTextBasedMode, + compInEsqlMode, 'fieldListGroupedSelectedFields-count' ); const availableFieldsCount = findTestSubject( - compInTextBasedMode, + compInEsqlMode, 'fieldListGroupedAvailableFields-count' ); - const emptyFieldsCount = findTestSubject( - compInTextBasedMode, - 'fieldListGroupedEmptyFields-count' - ); - const metaFieldsCount = findTestSubject( - compInTextBasedMode, - 'fieldListGroupedMetaFields-count' - ); + const emptyFieldsCount = findTestSubject(compInEsqlMode, 'fieldListGroupedEmptyFields-count'); + const metaFieldsCount = findTestSubject(compInEsqlMode, 'fieldListGroupedMetaFields-count'); const unmappedFieldsCount = findTestSubject( - compInTextBasedMode, + compInEsqlMode, 'fieldListGroupedUnmappedFields-count' ); @@ -561,7 +553,7 @@ describe('discover responsive sidebar', function () { expect(mockCalcFieldCounts.mock.calls.length).toBe(0); - expect(findTestSubject(compInTextBasedMode, 'fieldListGrouped__ariaDescription').text()).toBe( + expect(findTestSubject(compInEsqlMode, 'fieldListGrouped__ariaDescription').text()).toBe( '2 selected fields. 3 available fields.' ); }); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx index 67c7bd28f0b0b9..23778ada7566aa 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx @@ -26,7 +26,6 @@ import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { AvailableFields$, DataDocuments$, - RecordRawType, } from '../../state_management/discover_data_state_container'; import { calcFieldCounts } from '../../utils/calc_field_counts'; import { FetchStatus, SidebarToggleState } from '../../../types'; @@ -39,6 +38,7 @@ import { } from './lib/sidebar_reducer'; import { useDiscoverCustomization } from '../../../../customizations'; import { useAdditionalFieldGroups } from '../../hooks/sidebar/use_additional_field_groups'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; const EMPTY_FIELD_COUNTS = {}; @@ -151,6 +151,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) useState(null); const { euiTheme } = useEuiTheme(); const services = useDiscoverServices(); + const isEsqlMode = useIsEsqlMode(); const { fieldListVariant, selectedDataView, @@ -174,8 +175,6 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) useEffect(() => { const subscription = props.documents$.subscribe((documentState) => { - const isPlainRecordType = documentState.recordRawType === RecordRawType.PLAIN; - switch (documentState?.fetchStatus) { case FetchStatus.UNINITIALIZED: dispatchSidebarStateAction({ @@ -189,7 +188,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) dispatchSidebarStateAction({ type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADING, payload: { - isPlainRecord: isPlainRecordType, + isEsqlMode, }, }); break; @@ -198,11 +197,9 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED, payload: { dataView: selectedDataViewRef.current, - fieldCounts: isPlainRecordType - ? EMPTY_FIELD_COUNTS - : calcFieldCounts(documentState.result), - textBasedQueryColumns: documentState.textBasedQueryColumns, - isPlainRecord: isPlainRecordType, + fieldCounts: isEsqlMode ? EMPTY_FIELD_COUNTS : calcFieldCounts(documentState.result), + esqlQueryColumns: documentState.esqlQueryColumns, + isEsqlMode, }, }); break; @@ -212,7 +209,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) payload: { dataView: selectedDataViewRef.current, fieldCounts: EMPTY_FIELD_COUNTS, - isPlainRecord: isPlainRecordType, + isEsqlMode, }, }); break; @@ -221,7 +218,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) } }); return () => subscription.unsubscribe(); - }, [props.documents$, dispatchSidebarStateAction, selectedDataViewRef]); + }, [props.documents$, dispatchSidebarStateAction, selectedDataViewRef, isEsqlMode]); useEffect(() => { if (selectedDataView !== selectedDataViewRef.current) { diff --git a/src/plugins/discover/public/application/main/components/sidebar/lib/get_field_list.ts b/src/plugins/discover/public/application/main/components/sidebar/lib/get_field_list.ts index 071454b0bd5791..99d911dd14f61f 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/lib/get_field_list.ts +++ b/src/plugins/discover/public/application/main/components/sidebar/lib/get_field_list.ts @@ -61,13 +61,11 @@ export function getDataViewFieldList( return [...dataViewFields, ...unknownFields]; } -export function getTextBasedQueryFieldList( - textBasedQueryColumns?: DatatableColumn[] -): DataViewField[] { - if (!textBasedQueryColumns) { +export function getEsqlQueryFieldList(esqlQueryColumns?: DatatableColumn[]): DataViewField[] { + if (!esqlQueryColumns) { return []; } - return textBasedQueryColumns.map( + return esqlQueryColumns.map( (column) => new DataViewField({ name: column.name, diff --git a/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.test.ts b/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.test.ts index 8c6ce4888fb47f..d1135192091bf0 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.test.ts +++ b/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.test.ts @@ -40,7 +40,7 @@ describe('sidebar reducer', function () { const resultForDocuments = discoverSidebarReducer(state, { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADING, payload: { - isPlainRecord: false, + isEsqlMode: false, }, }); expect(resultForDocuments).toEqual( @@ -51,13 +51,13 @@ describe('sidebar reducer', function () { status: DiscoverSidebarReducerStatus.PROCESSING, }) ); - const resultForTextBasedQuery = discoverSidebarReducer(state, { + const resultForEsqlQuery = discoverSidebarReducer(state, { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADING, payload: { - isPlainRecord: true, + isEsqlMode: true, }, }); - expect(resultForTextBasedQuery).toEqual( + expect(resultForEsqlQuery).toEqual( expect.objectContaining({ dataView, allFields: null, @@ -75,7 +75,7 @@ describe('sidebar reducer', function () { const resultForDocuments = discoverSidebarReducer(state, { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED, payload: { - isPlainRecord: false, + isEsqlMode: false, dataView: stubDataViewWithoutTimeField, fieldCounts, }, @@ -96,13 +96,13 @@ describe('sidebar reducer', function () { status: DiscoverSidebarReducerStatus.COMPLETED, }); - const resultForTextBasedQuery = discoverSidebarReducer(state, { + const resultForEsqlQuery = discoverSidebarReducer(state, { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED, payload: { - isPlainRecord: true, + isEsqlMode: true, dataView: stubDataViewWithoutTimeField, fieldCounts: {}, - textBasedQueryColumns: [ + esqlQueryColumns: [ { id: '1', name: 'text1', @@ -122,7 +122,7 @@ describe('sidebar reducer', function () { ] as DatatableColumn[], }, }); - expect(resultForTextBasedQuery).toStrictEqual({ + expect(resultForEsqlQuery).toStrictEqual({ dataView: stubDataViewWithoutTimeField, allFields: [ new DataViewField({ @@ -149,7 +149,7 @@ describe('sidebar reducer', function () { const resultWhileLoading = discoverSidebarReducer(state, { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED, payload: { - isPlainRecord: false, + isEsqlMode: false, dataView: stubDataViewWithoutTimeField, fieldCounts: null, }, diff --git a/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.ts b/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.ts index 54e9a2c95ce12e..e771ed9a19a527 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.ts +++ b/src/plugins/discover/public/application/main/components/sidebar/lib/sidebar_reducer.ts @@ -8,7 +8,7 @@ import { type DataView, type DataViewField } from '@kbn/data-views-plugin/common'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import { getDataViewFieldList, getTextBasedQueryFieldList } from './get_field_list'; +import { getDataViewFieldList, getEsqlQueryFieldList } from './get_field_list'; export enum DiscoverSidebarReducerActionType { RESET = 'RESET', @@ -33,15 +33,15 @@ type DiscoverSidebarReducerAction = | { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADING; payload: { - isPlainRecord: boolean; + isEsqlMode: boolean; }; } | { type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED; payload: { fieldCounts: DiscoverSidebarReducerState['fieldCounts']; - textBasedQueryColumns?: DatatableColumn[]; // from text-based searches - isPlainRecord: boolean; + esqlQueryColumns?: DatatableColumn[]; // from ES|QL searches + isEsqlMode: boolean; dataView: DataView | null | undefined; }; }; @@ -92,12 +92,12 @@ export function discoverSidebarReducer( return { ...state, fieldCounts: null, - allFields: action.payload.isPlainRecord ? null : state.allFields, + allFields: action.payload.isEsqlMode ? null : state.allFields, status: DiscoverSidebarReducerStatus.PROCESSING, }; case DiscoverSidebarReducerActionType.DOCUMENTS_LOADED: - const mappedAndUnmappedFields = action.payload.isPlainRecord - ? getTextBasedQueryFieldList(action.payload.textBasedQueryColumns) + const mappedAndUnmappedFields = action.payload.isEsqlMode + ? getEsqlQueryFieldList(action.payload.esqlQueryColumns) : getDataViewFieldList(action.payload.dataView, action.payload.fieldCounts); return { ...state, diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 61acdd1875a145..d05226a0098ce6 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -23,14 +23,14 @@ import { onSaveSearch } from './on_save_search'; import { useDiscoverCustomization } from '../../../../customizations'; import { addLog } from '../../../../utils/add_log'; import { useAppStateSelector } from '../../state_management/discover_app_state_container'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { useDiscoverTopNav } from './use_discover_topnav'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; export interface DiscoverTopNavProps { savedQuery?: string; stateContainer: DiscoverStateContainer; - textBasedLanguageModeErrors?: Error; - textBasedLanguageModeWarning?: string; + esqlModeErrors?: Error; + esqlModeWarning?: string; onFieldEdited: () => Promise; isLoading?: boolean; onCancelClick?: () => void; @@ -39,8 +39,8 @@ export interface DiscoverTopNavProps { export const DiscoverTopNav = ({ savedQuery, stateContainer, - textBasedLanguageModeErrors, - textBasedLanguageModeWarning, + esqlModeErrors, + esqlModeWarning, onFieldEdited, isLoading, onCancelClick, @@ -60,14 +60,13 @@ export const DiscoverTopNav = ({ const dataView = useInternalStateSelector((state) => state.dataView!); const savedDataViews = useInternalStateSelector((state) => state.savedDataViews); const savedSearch = useSavedSearchInitial(); + const isEsqlMode = useIsEsqlMode(); const showDatePicker = useMemo(() => { - // always show the timepicker for text based languages - const isTextBased = isTextBasedQuery(query); + // always show the timepicker for ES|QL mode return ( - isTextBased || - (!isTextBased && dataView.isTimeBased() && dataView.type !== DataViewType.ROLLUP) + isEsqlMode || (!isEsqlMode && dataView.isTimeBased() && dataView.type !== DataViewType.ROLLUP) ); - }, [dataView, query]); + }, [dataView, isEsqlMode]); const closeFieldEditor = useRef<() => void | undefined>(); const closeDataViewEditor = useRef<() => void | undefined>(); @@ -151,7 +150,7 @@ export const DiscoverTopNav = ({ } }; - const onTextBasedSavedAndExit = useCallback( + const onEsqlSavedAndExit = useCallback( ({ onSave, onCancel }) => { onSaveSearch({ savedSearch: stateContainer.savedSearchState.getState(), @@ -257,11 +256,9 @@ export const DiscoverTopNav = ({ shouldHideDefaultDataviewPicker ? undefined : dataViewPickerProps } displayStyle="detached" - textBasedLanguageModeErrors={ - textBasedLanguageModeErrors ? [textBasedLanguageModeErrors] : undefined - } - textBasedLanguageModeWarning={textBasedLanguageModeWarning} - onTextBasedSavedAndExit={onTextBasedSavedAndExit} + textBasedLanguageModeErrors={esqlModeErrors ? [esqlModeErrors] : undefined} + textBasedLanguageModeWarning={esqlModeWarning} + onTextBasedSavedAndExit={onEsqlSavedAndExit} prependFilterBar={ searchBarCustomization?.PrependFilterBar ? ( diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts index 9b5451558529fa..2faf12d62bf0aa 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts @@ -27,7 +27,7 @@ test('getTopNavLinks result', () => { onOpenInspector: jest.fn(), services, state, - isTextBased: false, + isEsqlMode: false, adHocDataViews: [], topNavCustomization: undefined, }); @@ -80,7 +80,7 @@ test('getTopNavLinks result for ES|QL mode', () => { onOpenInspector: jest.fn(), services, state, - isTextBased: true, + isEsqlMode: true, adHocDataViews: [], topNavCustomization: undefined, }); diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx index ce1592c1598d3f..a25e10ce3b0bee 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx @@ -28,7 +28,7 @@ export const getTopNavLinks = ({ services, state, onOpenInspector, - isTextBased, + isEsqlMode, adHocDataViews, topNavCustomization, }: { @@ -36,7 +36,7 @@ export const getTopNavLinks = ({ services: DiscoverServices; state: DiscoverStateContainer; onOpenInspector: () => void; - isTextBased: boolean; + isEsqlMode: boolean; adHocDataViews: DataView[]; topNavCustomization: TopNavCustomization | undefined; }): TopNavMenuData[] => { @@ -54,7 +54,7 @@ export const getTopNavLinks = ({ services, stateContainer: state, adHocDataViews, - isPlainRecord: isTextBased, + isEsqlMode, }); }, testId: 'discoverAlertsButton', @@ -127,7 +127,7 @@ export const getTopNavLinks = ({ savedSearch.searchSource, state.appState.getState(), services, - isTextBased + isEsqlMode ); const { locator, notifications } = services; @@ -189,7 +189,7 @@ export const getTopNavLinks = ({ }), }, sharingData: { - isTextBased, + isTextBased: isEsqlMode, locatorParams: [{ id: locator.id, params }], ...searchSourceSharingData, // CSV reports can be generated without a saved search so we provide a fallback title diff --git a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx index 57bcf6baa4e8d0..a2ecbe1f8123ff 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx @@ -10,13 +10,13 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiSwitch } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { isOfAggregateQueryType } from '@kbn/es-query'; import { SavedObjectSaveModal, showSaveModal, OnSaveProps } from '@kbn/saved-objects-plugin/public'; import { SavedSearch, SaveSavedSearchOptions } from '@kbn/saved-search-plugin/public'; import { isLegacyTableEnabled } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../../build_services'; import { DiscoverStateContainer } from '../../state_management/discover_state'; import { getAllowedSampleSize } from '../../../../utils/get_allowed_sample_size'; +import { DataSourceType, isDataSourceType } from '../../../../../common/data_sources'; async function saveDataSource({ savedSearch, @@ -114,6 +114,7 @@ export async function onSaveSearch({ isTitleDuplicateConfirmed: boolean; onTitleDuplicate: () => void; }) => { + const appState = state.appState.getState(); const currentTitle = savedSearch.title; const currentTimeRestore = savedSearch.timeRestore; const currentRowsPerPage = savedSearch.rowsPerPage; @@ -121,18 +122,19 @@ export async function onSaveSearch({ const currentDescription = savedSearch.description; const currentTags = savedSearch.tags; const currentVisContext = savedSearch.visContext; + savedSearch.title = newTitle; savedSearch.description = newDescription; savedSearch.timeRestore = newTimeRestore; savedSearch.rowsPerPage = isLegacyTableEnabled({ uiSettings, - isTextBasedQueryMode: isOfAggregateQueryType(savedSearch.searchSource.getField('query')), + isEsqlMode: isDataSourceType(appState.dataSource, DataSourceType.Esql), }) ? currentRowsPerPage - : state.appState.getState().rowsPerPage; + : appState.rowsPerPage; // save the custom value or reset it if it's invalid - const appStateSampleSize = state.appState.getState().sampleSize; + const appStateSampleSize = appState.sampleSize; const allowedSampleSize = getAllowedSampleSize(appStateSampleSize, uiSettings); savedSearch.sampleSize = appStateSampleSize && allowedSampleSize === appStateSampleSize @@ -165,6 +167,7 @@ export async function onSaveSearch({ state, navigateOrReloadSavedSearch, }); + // If the save wasn't successful, put the original values back. if (!response) { savedSearch.title = currentTitle; @@ -180,7 +183,9 @@ export async function onSaveSearch({ state.internalState.transitions.resetOnSavedSearchChange(); state.appState.resetInitialState(); } + onSaveCb?.(); + return response; }; @@ -199,6 +204,7 @@ export async function onSaveSearch({ onClose={onClose ?? (() => {})} /> ); + showSaveModal(saveModal); } diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx index bea933950200de..0ef82691681e14 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx @@ -17,7 +17,7 @@ import { dataViewWithNoTimefieldMock } from '../../../../__mocks__/data_view_no_ import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; -const mount = (dataView = dataViewMock, isPlainRecord = false) => { +const mount = (dataView = dataViewMock, isEsqlMode = false) => { const stateContainer = getDiscoverStateMock({ isTimeBased: true }); stateContainer.actions.setDataView(dataView); return mountWithIntl( @@ -26,7 +26,7 @@ const mount = (dataView = dataViewMock, isPlainRecord = false) => { stateContainer={stateContainer} anchorElement={document.createElement('div')} adHocDataViews={[]} - isPlainRecord={isPlainRecord} + isEsqlMode={isEsqlMode} services={discoverServiceMock} onClose={jest.fn()} /> diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx index 36bea3fb215069..097278ac9cd66e 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx @@ -40,7 +40,7 @@ interface AlertsPopoverProps { savedQueryId?: string; adHocDataViews: DataView[]; services: DiscoverServices; - isPlainRecord?: boolean; + isEsqlMode?: boolean; } interface EsQueryAlertMetaData extends RuleTypeMetaData { @@ -54,7 +54,7 @@ export function AlertsPopover({ services, stateContainer, onClose: originalOnClose, - isPlainRecord, + isEsqlMode, }: AlertsPopoverProps) { const dataView = stateContainer.internalState.getState().dataView; const query = stateContainer.appState.getState().query; @@ -72,7 +72,7 @@ export function AlertsPopover({ * Provides the default parameters used to initialize the new rule */ const getParams = useCallback(() => { - if (isPlainRecord) { + if (isEsqlMode) { return { searchType: 'esqlQuery', esqlQuery: query, @@ -87,7 +87,7 @@ export function AlertsPopover({ .searchSource.getSerializedFields(), savedQueryId, }; - }, [isPlainRecord, stateContainer.appState, stateContainer.savedSearchState, query, timeField]); + }, [isEsqlMode, stateContainer.appState, stateContainer.savedSearchState, query, timeField]); const discoverMetadata: EsQueryAlertMetaData = useMemo( () => ({ @@ -128,12 +128,12 @@ export function AlertsPopover({ }, [alertFlyoutVisible, triggersActionsUi, discoverMetadata, getParams, onClose, stateContainer]); const hasTimeFieldName: boolean = useMemo(() => { - if (!isPlainRecord) { + if (!isEsqlMode) { return Boolean(dataView?.timeFieldName); } else { return Boolean(timeField); } - }, [dataView?.timeFieldName, isPlainRecord, timeField]); + }, [dataView?.timeFieldName, isEsqlMode, timeField]); const panels = [ { @@ -201,13 +201,13 @@ export function openAlertsPopover({ stateContainer, services, adHocDataViews, - isPlainRecord, + isEsqlMode, }: { anchorElement: HTMLElement; stateContainer: DiscoverStateContainer; services: DiscoverServices; adHocDataViews: DataView[]; - isPlainRecord?: boolean; + isEsqlMode?: boolean; }) { if (isOpen) { closeAlertsPopover(); @@ -226,7 +226,7 @@ export function openAlertsPopover({ stateContainer={stateContainer} adHocDataViews={adHocDataViews} services={services} - isPlainRecord={isPlainRecord} + isEsqlMode={isEsqlMode} /> diff --git a/src/plugins/discover/public/application/main/components/top_nav/use_discover_topnav.ts b/src/plugins/discover/public/application/main/components/top_nav/use_discover_topnav.ts index 58eda4f2926743..06efd3205d1bea 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/use_discover_topnav.ts +++ b/src/plugins/discover/public/application/main/components/top_nav/use_discover_topnav.ts @@ -11,10 +11,9 @@ import useObservable from 'react-use/lib/useObservable'; import { useDiscoverCustomization } from '../../../../customizations'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { useInspector } from '../../hooks/use_inspector'; -import { useAppStateSelector } from '../../state_management/discover_app_state_container'; +import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; import { useInternalStateSelector } from '../../state_management/discover_internal_state_container'; import type { DiscoverStateContainer } from '../../state_management/discover_state'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { getTopNavBadges } from './get_top_nav_badges'; import { getTopNavLinks } from './get_top_nav_links'; @@ -43,8 +42,7 @@ export const useDiscoverTopNav = ({ const dataView = useInternalStateSelector((state) => state.dataView); const adHocDataViews = useInternalStateSelector((state) => state.adHocDataViews); - const query = useAppStateSelector((state) => state.query); - const isTextBased = useMemo(() => isTextBasedQuery(query), [query]); + const isEsqlMode = useIsEsqlMode(); const onOpenInspector = useInspector({ inspector: services.inspector, stateContainer, @@ -57,14 +55,14 @@ export const useDiscoverTopNav = ({ services, state: stateContainer, onOpenInspector, - isTextBased, + isEsqlMode, adHocDataViews, topNavCustomization, }), [ adHocDataViews, dataView, - isTextBased, + isEsqlMode, onOpenInspector, services, stateContainer, diff --git a/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts b/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts index e41047dedb887f..d6999c22004364 100644 --- a/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts +++ b/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts @@ -18,11 +18,10 @@ import { DataDocumentsMsg, DataMainMsg, DataTotalHitsMsg, - RecordRawType, SavedSearchData, } from '../state_management/discover_data_state_container'; import { fetchDocuments } from './fetch_documents'; -import { fetchTextBased } from './fetch_text_based'; +import { fetchEsql } from './fetch_esql'; import { buildDataTableRecord } from '@kbn/discover-utils'; import { dataViewMock, esHitsMockWithSort } from '@kbn/discover-utils/src/__mocks__'; import { searchResponseIncompleteWarningLocalCluster } from '@kbn/search-response-warnings/src/__mocks__/search_response_warnings'; @@ -31,12 +30,12 @@ jest.mock('./fetch_documents', () => ({ fetchDocuments: jest.fn().mockResolvedValue([]), })); -jest.mock('./fetch_text_based', () => ({ - fetchTextBased: jest.fn().mockResolvedValue([]), +jest.mock('./fetch_esql', () => ({ + fetchEsql: jest.fn().mockResolvedValue([]), })); const mockFetchDocuments = fetchDocuments as unknown as jest.MockedFunction; -const mockfetchTextBased = fetchTextBased as unknown as jest.MockedFunction; +const mockfetchEsql = fetchEsql as unknown as jest.MockedFunction; function subjectCollector(subject: Subject): () => Promise { const promise = firstValueFrom( @@ -90,7 +89,7 @@ describe('test fetchAll', () => { }; mockFetchDocuments.mockReset().mockResolvedValue({ records: [] }); - mockfetchTextBased.mockReset().mockResolvedValue({ records: [] }); + mockfetchEsql.mockReset().mockResolvedValue({ records: [] }); }); test('changes of fetchStatus when starting with FetchStatus.UNINITIALIZED', async () => { @@ -120,10 +119,9 @@ describe('test fetchAll', () => { await waitForNextTick(); expect(await collect()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, + { fetchStatus: FetchStatus.LOADING }, { fetchStatus: FetchStatus.COMPLETE, - recordRawType: 'document', result: documents, }, ]); @@ -141,21 +139,19 @@ describe('test fetchAll', () => { subjects.totalHits$.next({ fetchStatus: FetchStatus.LOADING, - recordRawType: RecordRawType.DOCUMENT, }); fetchAll(subjects, false, deps); await waitForNextTick(); subjects.totalHits$.next({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: 42, }); expect(await collect()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, - { fetchStatus: FetchStatus.PARTIAL, recordRawType: 'document', result: 2 }, - { fetchStatus: FetchStatus.COMPLETE, recordRawType: 'document', result: 42 }, + { fetchStatus: FetchStatus.LOADING }, + { fetchStatus: FetchStatus.PARTIAL, result: 2 }, + { fetchStatus: FetchStatus.COMPLETE, result: 42 }, ]); }); @@ -164,21 +160,19 @@ describe('test fetchAll', () => { searchSource.getField('index')!.isTimeBased = () => true; subjects.totalHits$.next({ fetchStatus: FetchStatus.LOADING, - recordRawType: RecordRawType.DOCUMENT, }); fetchAll(subjects, false, deps); await waitForNextTick(); subjects.totalHits$.next({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: 32, }); expect(await collect()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, - { fetchStatus: FetchStatus.PARTIAL, recordRawType: 'document', result: 0 }, // From documents query - { fetchStatus: FetchStatus.COMPLETE, recordRawType: 'document', result: 32 }, + { fetchStatus: FetchStatus.LOADING }, + { fetchStatus: FetchStatus.PARTIAL, result: 0 }, // From documents query + { fetchStatus: FetchStatus.COMPLETE, result: 32 }, ]); }); @@ -191,31 +185,28 @@ describe('test fetchAll', () => { mockFetchDocuments.mockResolvedValue({ records: documents }); subjects.totalHits$.next({ fetchStatus: FetchStatus.LOADING, - recordRawType: RecordRawType.DOCUMENT, }); fetchAll(subjects, false, deps); await waitForNextTick(); subjects.totalHits$.next({ fetchStatus: FetchStatus.ERROR, - recordRawType: RecordRawType.DOCUMENT, error: { msg: 'Oh noes!' } as unknown as Error, }); expect(await collectTotalHits()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, - { fetchStatus: FetchStatus.PARTIAL, recordRawType: 'document', result: 1 }, - { fetchStatus: FetchStatus.ERROR, recordRawType: 'document', error: { msg: 'Oh noes!' } }, + { fetchStatus: FetchStatus.LOADING }, + { fetchStatus: FetchStatus.PARTIAL, result: 1 }, + { fetchStatus: FetchStatus.ERROR, error: { msg: 'Oh noes!' } }, ]); expect(await collectMain()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, - { fetchStatus: FetchStatus.PARTIAL, recordRawType: 'document' }, + { fetchStatus: FetchStatus.LOADING }, + { fetchStatus: FetchStatus.PARTIAL }, { fetchStatus: FetchStatus.COMPLETE, foundDocuments: true, error: undefined, - recordRawType: 'document', }, ]); }); @@ -226,23 +217,20 @@ describe('test fetchAll', () => { mockFetchDocuments.mockRejectedValue({ msg: 'This query failed' }); subjects.totalHits$.next({ fetchStatus: FetchStatus.LOADING, - recordRawType: RecordRawType.DOCUMENT, }); fetchAll(subjects, false, deps); await waitForNextTick(); subjects.totalHits$.next({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: 5, }); expect(await collectMain()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'document' }, + { fetchStatus: FetchStatus.LOADING }, { fetchStatus: FetchStatus.ERROR, error: { msg: 'This query failed' }, - recordRawType: 'document', }, // Here should be no COMPLETE coming anymore ]); @@ -255,9 +243,9 @@ describe('test fetchAll', () => { { _id: '2', _index: 'logs' }, ]; const documents = hits.map((hit) => buildDataTableRecord(hit, dataViewMock)); - mockfetchTextBased.mockResolvedValue({ + mockfetchEsql.mockResolvedValue({ records: documents, - textBasedQueryColumns: [{ id: '1', name: 'test1', meta: { type: 'number' } }], + esqlQueryColumns: [{ id: '1', name: 'test1', meta: { type: 'number' } }], }); const query = { esql: 'from foo' }; deps = { @@ -284,12 +272,11 @@ describe('test fetchAll', () => { expect(await collect()).toEqual([ { fetchStatus: FetchStatus.UNINITIALIZED }, - { fetchStatus: FetchStatus.LOADING, recordRawType: 'plain', query }, + { fetchStatus: FetchStatus.LOADING, query }, { fetchStatus: FetchStatus.PARTIAL, - recordRawType: 'plain', result: documents, - textBasedQueryColumns: [{ id: '1', name: 'test1', meta: { type: 'number' } }], + esqlQueryColumns: [{ id: '1', name: 'test1', meta: { type: 'number' } }], query, }, ]); @@ -308,7 +295,6 @@ describe('test fetchAll', () => { mockFetchDocuments.mockResolvedValue({ records: moreRecords, interceptedWarnings }); subjects.documents$.next({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }); fetchMoreDocuments(subjects, deps); @@ -318,17 +304,14 @@ describe('test fetchAll', () => { { fetchStatus: FetchStatus.UNINITIALIZED }, { fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }, { fetchStatus: FetchStatus.LOADING_MORE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }, { fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: [...initialRecords, ...moreRecords], interceptedWarnings, }, @@ -346,7 +329,6 @@ describe('test fetchAll', () => { mockFetchDocuments.mockRejectedValue({ msg: 'This query failed' }); subjects.documents$.next({ fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }); fetchMoreDocuments(subjects, deps); @@ -356,17 +338,14 @@ describe('test fetchAll', () => { { fetchStatus: FetchStatus.UNINITIALIZED }, { fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }, { fetchStatus: FetchStatus.LOADING_MORE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }, { fetchStatus: FetchStatus.COMPLETE, - recordRawType: RecordRawType.DOCUMENT, result: initialRecords, }, ]); @@ -385,7 +364,7 @@ describe('test fetchAll', () => { test('should swallow abort errors', async () => { const collect = subjectCollector(subjects.documents$); - mockfetchTextBased.mockRejectedValue({ msg: 'The query was aborted' }); + mockfetchEsql.mockRejectedValue({ msg: 'The query was aborted' }); const query = { esql: 'from foo' }; deps = { abortController: new AbortController(), diff --git a/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts b/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts index 2d003680904d68..410d1d468275d7 100644 --- a/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts +++ b/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts @@ -5,14 +5,15 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { Adapters } from '@kbn/inspector-plugin/common'; import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public'; import { BehaviorSubject, filter, firstValueFrom, map, merge, scan } from 'rxjs'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { isEqual } from 'lodash'; +import { isOfAggregateQueryType } from '@kbn/es-query'; import type { DiscoverAppState } from '../state_management/discover_app_state_container'; import { updateVolatileSearchSource } from './update_search_source'; -import { getRawRecordType } from '../utils/get_raw_record_type'; import { checkHitCount, sendCompleteMsg, @@ -25,13 +26,9 @@ import { } from '../hooks/use_saved_search_messages'; import { fetchDocuments } from './fetch_documents'; import { FetchStatus } from '../../types'; -import { - DataMsg, - RecordRawType, - SavedSearchData, -} from '../state_management/discover_data_state_container'; +import { DataMsg, SavedSearchData } from '../state_management/discover_data_state_container'; import { DiscoverServices } from '../../../build_services'; -import { fetchTextBased } from './fetch_text_based'; +import { fetchEsql } from './fetch_esql'; import { InternalState } from '../state_management/discover_internal_state_container'; export interface FetchDeps { @@ -74,13 +71,13 @@ export function fetchAll( const dataView = searchSource.getField('index')!; const query = getAppState().query; const prevQuery = dataSubjects.documents$.getValue().query; - const recordRawType = getRawRecordType(query); - const useTextBased = recordRawType === RecordRawType.PLAIN; + const isEsqlQuery = isOfAggregateQueryType(query); + if (reset) { - sendResetMsg(dataSubjects, initialFetchStatus, recordRawType); + sendResetMsg(dataSubjects, initialFetchStatus); } - if (recordRawType === RecordRawType.DOCUMENT) { + if (!isEsqlQuery) { // Update the base searchSource, base for all child fetches updateVolatileSearchSource(searchSource, { dataView, @@ -90,23 +87,20 @@ export function fetchAll( }); } - const shouldFetchTextBased = useTextBased && !!query; - // Mark all subjects as loading - sendLoadingMsg(dataSubjects.main$, { recordRawType }); - sendLoadingMsg(dataSubjects.documents$, { recordRawType, query }); + sendLoadingMsg(dataSubjects.main$); + sendLoadingMsg(dataSubjects.documents$, { query }); // histogram for data view mode will send `loading` for totalHits$ - if (shouldFetchTextBased) { + if (isEsqlQuery) { sendLoadingMsg(dataSubjects.totalHits$, { - recordRawType, result: dataSubjects.totalHits$.getValue().result, }); } // Start fetching all required requests - const response = shouldFetchTextBased - ? fetchTextBased( + const response = isEsqlQuery + ? fetchEsql( query, dataView, data, @@ -115,11 +109,12 @@ export function fetchAll( abortController.signal ) : fetchDocuments(searchSource, fetchDeps); - const fetchType = shouldFetchTextBased ? 'fetchTextBased' : 'fetchDocuments'; + const fetchType = isEsqlQuery ? 'fetchTextBased' : 'fetchDocuments'; const startTime = window.performance.now(); + // Handle results of the individual queries and forward the results to the corresponding dataSubjects response - .then(({ records, textBasedQueryColumns, interceptedWarnings, textBasedHeaderWarning }) => { + .then(({ records, esqlQueryColumns, interceptedWarnings, esqlHeaderWarning }) => { if (services.analytics) { const duration = window.performance.now() - startTime; reportPerformanceMetricEvent(services.analytics, { @@ -129,11 +124,10 @@ export function fetchAll( }); } - if (shouldFetchTextBased) { + if (isEsqlQuery) { dataSubjects.totalHits$.next({ fetchStatus: FetchStatus.COMPLETE, result: records.length, - recordRawType, }); } else { const currentTotalHits = dataSubjects.totalHits$.getValue(); @@ -144,29 +138,28 @@ export function fetchAll( dataSubjects.totalHits$.next({ fetchStatus: FetchStatus.PARTIAL, result: records.length, - recordRawType, }); } } + /** - * The partial state for text based query languages is necessary in case the query has changed - * In the follow up useTextBasedQueryLanguage hook in this case new columns are added to AppState + * The partial state for ES|QL mode is necessary in case the query has changed + * In the follow up useEsqlMode hook in this case new columns are added to AppState * So the data table shows the new columns of the table. The partial state was introduced to prevent * To frequent change of state causing the table to re-render to often, which causes race conditions * So it takes too long, a bad user experience, also a potential flakniess in tests */ const fetchStatus = - useTextBased && (!prevQuery || !isEqual(query, prevQuery)) + isEsqlQuery && (!prevQuery || !isEqual(query, prevQuery)) ? FetchStatus.PARTIAL : FetchStatus.COMPLETE; dataSubjects.documents$.next({ fetchStatus, result: records, - textBasedQueryColumns, - textBasedHeaderWarning, + esqlQueryColumns, + esqlHeaderWarning, interceptedWarnings, - recordRawType, query, }); @@ -210,12 +203,11 @@ export async function fetchMoreDocuments( try { const { getAppState, getInternalState, services, savedSearch } = fetchDeps; const searchSource = savedSearch.searchSource.createChild(); - const dataView = searchSource.getField('index')!; const query = getAppState().query; - const recordRawType = getRawRecordType(query); + const isEsqlQuery = isOfAggregateQueryType(query); - if (recordRawType === RecordRawType.PLAIN) { + if (isEsqlQuery) { // not supported yet return; } diff --git a/src/plugins/discover/public/application/main/data_fetching/fetch_text_based.ts b/src/plugins/discover/public/application/main/data_fetching/fetch_esql.ts similarity index 80% rename from src/plugins/discover/public/application/main/data_fetching/fetch_text_based.ts rename to src/plugins/discover/public/application/main/data_fetching/fetch_esql.ts index 7045eb3c28cbc7..3aba795d26920d 100644 --- a/src/plugins/discover/public/application/main/data_fetching/fetch_text_based.ts +++ b/src/plugins/discover/public/application/main/data_fetching/fetch_esql.ts @@ -18,14 +18,14 @@ import { textBasedQueryStateToAstWithValidation } from '@kbn/data-plugin/common' import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { RecordsFetchResponse } from '../../types'; -interface TextBasedErrorResponse { +interface EsqlErrorResponse { error: { message: string; }; type: 'error'; } -export function fetchTextBased( +export function fetchEsql( query: Query | AggregateQuery, dataView: DataView, data: DataPublicPluginStart, @@ -42,10 +42,10 @@ export function fetchTextBased( time: timeRange, dataView, inputQuery, - titleForInspector: i18n.translate('discover.inspectorTextBasedRequestTitle', { + titleForInspector: i18n.translate('discover.inspectorEsqlRequestTitle', { defaultMessage: 'Table', }), - descriptionForInspector: i18n.translate('discover.inspectorTextBasedRequestDescription', { + descriptionForInspector: i18n.translate('discover.inspectorEsqlRequestDescription', { defaultMessage: 'This request queries Elasticsearch to fetch results for the table.', }), }) @@ -57,18 +57,18 @@ export function fetchTextBased( abortSignal?.addEventListener('abort', contract.cancel); const execution = contract.getData(); let finalData: DataTableRecord[] = []; - let textBasedQueryColumns: Datatable['columns'] | undefined; + let esqlQueryColumns: Datatable['columns'] | undefined; let error: string | undefined; - let textBasedHeaderWarning: string | undefined; + let esqlHeaderWarning: string | undefined; execution.pipe(pluck('result')).subscribe((resp) => { - const response = resp as Datatable | TextBasedErrorResponse; + const response = resp as Datatable | EsqlErrorResponse; if (response.type === 'error') { error = response.error.message; } else { const table = response as Datatable; const rows = table?.rows ?? []; - textBasedQueryColumns = table?.columns ?? undefined; - textBasedHeaderWarning = table.warning ?? undefined; + esqlQueryColumns = table?.columns ?? undefined; + esqlHeaderWarning = table.warning ?? undefined; finalData = rows.map((row: Record, idx: number) => { return { id: String(idx), @@ -84,16 +84,16 @@ export function fetchTextBased( } else { return { records: finalData || [], - textBasedQueryColumns, - textBasedHeaderWarning, + esqlQueryColumns, + esqlHeaderWarning, }; } }); } return { records: [] as DataTableRecord[], - textBasedQueryColumns: [], - textBasedHeaderWarning: undefined, + esqlQueryColumns: [], + esqlHeaderWarning: undefined, }; }) .catch((err) => { diff --git a/src/plugins/discover/public/application/main/discover_main_app.tsx b/src/plugins/discover/public/application/main/discover_main_app.tsx index 7872aa5440304f..e59be8cb101855 100644 --- a/src/plugins/discover/public/application/main/discover_main_app.tsx +++ b/src/plugins/discover/public/application/main/discover_main_app.tsx @@ -17,7 +17,7 @@ import { useDiscoverServices } from '../../hooks/use_discover_services'; import { useSavedSearchAliasMatchRedirect } from '../../hooks/saved_search_alias_match_redirect'; import { useSavedSearchInitial } from './state_management/discover_state_provider'; import { useAdHocDataViews } from './hooks/use_adhoc_data_views'; -import { useTextBasedQueryLanguage } from './hooks/use_text_based_query_language'; +import { useEsqlMode } from './hooks/use_esql_mode'; import { addLog } from '../../utils/add_log'; const DiscoverLayoutMemoized = React.memo(DiscoverLayout); @@ -45,10 +45,11 @@ export function DiscoverMainApp(props: DiscoverMainProps) { /** * State changes (data view, columns), when a text base query result is returned */ - useTextBasedQueryLanguage({ + useEsqlMode({ dataViews: services.dataViews, stateContainer, }); + /** * Start state syncing and fetch data if necessary */ diff --git a/src/plugins/discover/public/application/main/discover_main_route.tsx b/src/plugins/discover/public/application/main/discover_main_route.tsx index b0c5ff4bc534f7..560f4cb03535ed 100644 --- a/src/plugins/discover/public/application/main/discover_main_route.tsx +++ b/src/plugins/discover/public/application/main/discover_main_route.tsx @@ -19,7 +19,6 @@ import { getSavedSearchFullPathUrl } from '@kbn/saved-search-plugin/public'; import useObservable from 'react-use/lib/useObservable'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { withSuspense } from '@kbn/shared-ux-utility'; -import { isOfAggregateQueryType } from '@kbn/es-query'; import { getInitialESQLQuery } from '@kbn/esql-utils'; import { ESQL_TYPE } from '@kbn/data-view-utils'; import { useUrl } from './hooks/use_url'; @@ -39,8 +38,8 @@ import { useDiscoverCustomizationService, } from '../../customizations'; import { DiscoverTopNavInline } from './components/top_nav/discover_topnav_inline'; -import { isTextBasedQuery } from './utils/is_text_based_query'; import { DiscoverStateContainer, LoadParams } from './state_management/discover_state'; +import { DataSourceType, isDataSourceType } from '../../../common/data_sources'; const DiscoverMainAppMemoized = memo(DiscoverMainApp); @@ -78,7 +77,6 @@ export function DiscoverMainRoute({ customizationContext, stateStorageContainer, }); - const { customizationService, isInitialized: isCustomizationServiceInitialized } = useDiscoverCustomizationService({ customizationCallbacks, @@ -116,7 +114,7 @@ export function DiscoverMainRoute({ return true; // bypass NoData screen } - if (isOfAggregateQueryType(stateContainer.appState.getState().query)) { + if (isDataSourceType(stateContainer.appState.getState().dataSource, DataSourceType.Esql)) { return true; } @@ -369,8 +367,7 @@ function getLoadParamsForNewSearch(stateContainer: DiscoverStateContainer): { const prevAppState = stateContainer.appState.getState(); const prevDataView = stateContainer.internalState.getState().dataView; const initialAppState = - prevAppState?.query && - isTextBasedQuery(prevAppState.query) && + isDataSourceType(prevAppState.dataSource, DataSourceType.Esql) && prevDataView && prevDataView.type === ESQL_TYPE ? { diff --git a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts index 9bb13020533f78..71a42b7d394a2b 100644 --- a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts +++ b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts @@ -10,12 +10,11 @@ import { useEffect } from 'react'; import { METRIC_TYPE } from '@kbn/analytics'; import { DiscoverServices } from '../../../build_services'; import { useSavedSearch } from '../state_management/discover_state_provider'; -import { isTextBasedQuery } from '../utils/is_text_based_query'; -import { useAppStateSelector } from '../state_management/discover_app_state_container'; import { useInternalStateSelector } from '../state_management/discover_internal_state_container'; import { ADHOC_DATA_VIEW_RENDER_EVENT } from '../../../constants'; import { DiscoverStateContainer } from '../state_management/discover_state'; import { useFiltersValidation } from './use_filters_validation'; +import { useIsEsqlMode } from './use_is_esql_mode'; export const useAdHocDataViews = ({ services, @@ -23,17 +22,16 @@ export const useAdHocDataViews = ({ stateContainer: DiscoverStateContainer; services: DiscoverServices; }) => { - const query = useAppStateSelector((state) => state.query); const dataView = useInternalStateSelector((state) => state.dataView); const savedSearch = useSavedSearch(); - const isTextBasedMode = isTextBasedQuery(query); + const isEsqlMode = useIsEsqlMode(); const { filterManager, toastNotifications } = services; useEffect(() => { if (dataView && !dataView.isPersisted()) { services.trackUiMetric?.(METRIC_TYPE.COUNT, ADHOC_DATA_VIEW_RENDER_EVENT); } - }, [dataView, isTextBasedMode, services]); + }, [dataView, isEsqlMode, services]); /** * Takes care of checking data view id references in filters diff --git a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx b/src/plugins/discover/public/application/main/hooks/use_esql_mode.test.tsx similarity index 87% rename from src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx rename to src/plugins/discover/public/application/main/hooks/use_esql_mode.test.tsx index 8777b357714ba2..5ae16f04292887 100644 --- a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx +++ b/src/plugins/discover/public/application/main/hooks/use_esql_mode.test.tsx @@ -10,9 +10,8 @@ import { renderHook } from '@testing-library/react-hooks'; import { waitFor } from '@testing-library/react'; import { DataViewsContract } from '@kbn/data-plugin/public'; import { discoverServiceMock } from '../../../__mocks__/services'; -import { useTextBasedQueryLanguage } from './use_text_based_query_language'; +import { useEsqlMode } from './use_esql_mode'; import { FetchStatus } from '../../types'; -import { RecordRawType } from '../state_management/discover_data_state_container'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { AggregateQuery, Query } from '@kbn/es-query'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; @@ -37,7 +36,6 @@ function getHookProps( stateContainer.internalState.transitions.setSavedDataViews([dataViewMock as DataViewListItem]); const msgLoading = { - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, query, }; @@ -52,7 +50,6 @@ function getHookProps( } const query = { esql: 'from the-data-view-title' }; const msgComplete = { - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -92,14 +89,14 @@ const renderHookWithContext = ( }); } - renderHook(() => useTextBasedQueryLanguage(props), { + renderHook(() => useEsqlMode(props), { wrapper: getHookContext(props.stateContainer), }); return props; }; -describe('useTextBasedQueryLanguage', () => { - test('a text based query should change state when loading and finished', async () => { +describe('useEsqlMode', () => { + test('an ES|QL query should change state when loading and finished', async () => { const { replaceUrlState, stateContainer } = renderHookWithContext(true); replaceUrlState.mockReset(); @@ -117,14 +114,13 @@ describe('useTextBasedQueryLanguage', () => { viewMode: undefined, }); }); - test('changing a text based query with different result columns should change state when loading and finished', async () => { + test('changing an ES|QL query with different result columns should change state when loading and finished', async () => { const { replaceUrlState, stateContainer } = renderHookWithContext(false); const documents$ = stateContainer.dataState.data$.documents$; stateContainer.dataState.data$.documents$.next(msgComplete); replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -145,13 +141,12 @@ describe('useTextBasedQueryLanguage', () => { }); }); - test('changing a text based query with same result columns should not change state when loading and finished', async () => { + test('changing an ES|QL query with same result columns should not change state when loading and finished', async () => { const { replaceUrlState, stateContainer } = renderHookWithContext(false); const documents$ = stateContainer.dataState.data$.documents$; stateContainer.dataState.data$.documents$.next(msgComplete); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -165,7 +160,7 @@ describe('useTextBasedQueryLanguage', () => { await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(0)); }); - test('only changing a text based query with same result columns should not change columns', async () => { + test('only changing an ES|QL query with same result columns should not change columns', async () => { const { replaceUrlState, stateContainer } = renderHookWithContext(false); const documents$ = stateContainer.dataState.data$.documents$; @@ -175,7 +170,6 @@ describe('useTextBasedQueryLanguage', () => { replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -195,7 +189,6 @@ describe('useTextBasedQueryLanguage', () => { replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -209,7 +202,7 @@ describe('useTextBasedQueryLanguage', () => { await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(0)); }); - test('if its not a text based query coming along, it should be ignored', async () => { + test('if its not an ES|QL query coming along, it should be ignored', async () => { const { replaceUrlState, stateContainer } = renderHookWithContext(false); const documents$ = stateContainer.dataState.data$.documents$; @@ -218,7 +211,6 @@ describe('useTextBasedQueryLanguage', () => { replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.DOCUMENT, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -230,7 +222,6 @@ describe('useTextBasedQueryLanguage', () => { }); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -257,7 +248,6 @@ describe('useTextBasedQueryLanguage', () => { expect(replaceUrlState).toHaveBeenCalledTimes(0); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -272,7 +262,6 @@ describe('useTextBasedQueryLanguage', () => { expect(replaceUrlState).toHaveBeenCalledTimes(0); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -296,7 +285,6 @@ describe('useTextBasedQueryLanguage', () => { const documents$ = stateContainer.dataState.data$.documents$; documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -316,7 +304,6 @@ describe('useTextBasedQueryLanguage', () => { const documents$ = stateContainer.dataState.data$.documents$; documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -329,7 +316,6 @@ describe('useTextBasedQueryLanguage', () => { }); expect(replaceUrlState).toHaveBeenCalledTimes(0); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -353,13 +339,11 @@ describe('useTextBasedQueryLanguage', () => { const documents$ = stateContainer.dataState.data$.documents$; documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.LOADING, query: { esql: 'from the-data-view-title | WHERE field1=2' }, }); expect(replaceUrlState).toHaveBeenCalledTimes(0); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -377,24 +361,20 @@ describe('useTextBasedQueryLanguage', () => { replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.LOADING, query: { esql: 'from the-data-view-title | keep field 1; | WHERE field1=2' }, }); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.ERROR, }); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.LOADING, query: { esql: 'from the-data-view-title | keep field1' }, }); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { @@ -412,20 +392,19 @@ describe('useTextBasedQueryLanguage', () => { }); }); - test('changing a text based query with an index pattern that not corresponds to a dataview should return results', async () => { + test('changing an ES|QL query with an index pattern that not corresponds to a dataview should return results', async () => { const props = getHookProps(query, discoverServiceMock.dataViews); const { stateContainer, replaceUrlState } = props; const documents$ = stateContainer.dataState.data$.documents$; props.stateContainer.actions.setDataView(dataViewMock); - renderHook(() => useTextBasedQueryLanguage(props), { wrapper: getHookContext(stateContainer) }); + renderHook(() => useEsqlMode(props), { wrapper: getHookContext(stateContainer) }); documents$.next(msgComplete); await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(0)); replaceUrlState.mockReset(); documents$.next({ - recordRawType: RecordRawType.PLAIN, fetchStatus: FetchStatus.PARTIAL, result: [ { diff --git a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts b/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts similarity index 90% rename from src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts rename to src/plugins/discover/public/application/main/hooks/use_esql_mode.ts index 063a5c21bfbe3a..a907b1e796c873 100644 --- a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts +++ b/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { isEqual } from 'lodash'; import { isOfAggregateQueryType, getAggregateQueryMode } from '@kbn/es-query'; import { useCallback, useEffect, useRef } from 'react'; @@ -20,10 +21,10 @@ const MAX_NUM_OF_COLUMNS = 50; const TRANSFORMATIONAL_COMMANDS = ['stats', 'keep']; /** - * Hook to take care of text based query language state transformations when a new result is returned + * Hook to take care of ES|QL state transformations when a new result is returned * If necessary this is setting displayed columns and selected data view */ -export function useTextBasedQueryLanguage({ +export function useEsqlMode({ dataViews, stateContainer, }: { @@ -42,7 +43,7 @@ export function useTextBasedQueryLanguage({ const cleanup = useCallback(() => { if (prev.current.query) { - // cleanup when it's not a text based query lang + // cleanup when it's not an ES|QL query prev.current = { columns: [], query: '', @@ -54,7 +55,7 @@ export function useTextBasedQueryLanguage({ const subscription = stateContainer.dataState.data$.documents$ .pipe( switchMap(async (next) => { - const { query, recordRawType } = next; + const { query } = next; if (!query || next.fetchStatus === FetchStatus.ERROR) { return; } @@ -66,7 +67,7 @@ export function useTextBasedQueryLanguage({ }; const { viewMode } = stateContainer.appState.getState(); let nextColumns: string[] = []; - const isTextBasedQueryLang = recordRawType === 'plain' && isOfAggregateQueryType(query); + const isEsqlQuery = isOfAggregateQueryType(query); const hasResults = Boolean(next.result?.length); let queryHasTransformationalCommands = false; if ('esql' in query) { @@ -78,7 +79,7 @@ export function useTextBasedQueryLanguage({ }); } - if (isTextBasedQueryLang) { + if (isEsqlQuery) { const language = getAggregateQueryMode(query); if (next.fetchStatus !== FetchStatus.PARTIAL) { return; @@ -100,8 +101,7 @@ export function useTextBasedQueryLanguage({ } const addColumnsToState = !isEqual(nextColumns, prev.current.columns); const queryChanged = query[language] !== prev.current.query; - const changeViewMode = - viewMode !== getValidViewMode({ viewMode, isTextBasedQueryMode: true }); + const changeViewMode = viewMode !== getValidViewMode({ viewMode, isEsqlMode: true }); if (!queryChanged || (!addColumnsToState && !changeViewMode)) { sendComplete(); return; diff --git a/src/plugins/discover/public/application/main/hooks/use_behavior_subject.ts b/src/plugins/discover/public/application/main/hooks/use_is_esql_mode.ts similarity index 50% rename from src/plugins/discover/public/application/main/hooks/use_behavior_subject.ts rename to src/plugins/discover/public/application/main/hooks/use_is_esql_mode.ts index 5be6bd3266c7bc..49f83ff1bf9c52 100644 --- a/src/plugins/discover/public/application/main/hooks/use_behavior_subject.ts +++ b/src/plugins/discover/public/application/main/hooks/use_is_esql_mode.ts @@ -5,15 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { useRef } from 'react'; -import { BehaviorSubject } from 'rxjs'; -export function useBehaviorSubject(props: T): BehaviorSubject { - const ref = useRef | null>(null); +import { DataSourceType, isDataSourceType } from '../../../../common/data_sources'; +import { useAppStateSelector } from '../state_management/discover_app_state_container'; - if (ref.current === null) { - ref.current = new BehaviorSubject(props); - } - - return ref.current; -} +export const useIsEsqlMode = () => { + const dataSource = useAppStateSelector((state) => state.dataSource); + return isDataSourceType(dataSource, DataSourceType.Esql); +}; diff --git a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.test.ts b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.test.ts index 6faf1c29257d9f..4097831464669b 100644 --- a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.test.ts +++ b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.test.ts @@ -18,11 +18,7 @@ import { } from './use_saved_search_messages'; import { FetchStatus } from '../../types'; import { BehaviorSubject } from 'rxjs'; -import { - DataDocumentsMsg, - DataMainMsg, - RecordRawType, -} from '../state_management/discover_data_state_container'; +import { DataDocumentsMsg, DataMainMsg } from '../state_management/discover_data_state_container'; import { filter } from 'rxjs'; import { dataViewMock, esHitsMockWithSort } from '@kbn/discover-utils/src/__mocks__'; import { buildDataTableRecord } from '@kbn/discover-utils'; @@ -69,13 +65,11 @@ describe('test useSavedSearch message generators', () => { main$.subscribe((value) => { if (value.fetchStatus !== FetchStatus.COMPLETE) { expect(value.fetchStatus).toBe(FetchStatus.LOADING); - expect(value.recordRawType).toBe(RecordRawType.DOCUMENT); done(); } }); sendLoadingMsg(main$, { foundDocuments: true, - recordRawType: RecordRawType.DOCUMENT, }); }); test('sendLoadingMoreMsg', (done) => { diff --git a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts index 9374045d4b0d55..66d022df5f3ffb 100644 --- a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts +++ b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts @@ -17,7 +17,6 @@ import type { DataTotalHits$, SavedSearchData, } from '../state_management/discover_data_state_container'; -import { RecordRawType } from '../state_management/discover_data_state_container'; /** * Sends COMPLETE message to the main$ observable with the information @@ -37,13 +36,7 @@ export function sendCompleteMsg(main$: DataMain$, foundDocuments = true) { if (main$.getValue().fetchStatus === FetchStatus.COMPLETE) { return; } - const recordRawType = main$.getValue().recordRawType; - main$.next({ - fetchStatus: FetchStatus.COMPLETE, - foundDocuments, - error: undefined, - recordRawType, - }); + main$.next({ fetchStatus: FetchStatus.COMPLETE, foundDocuments, error: undefined }); } /** @@ -51,11 +44,7 @@ export function sendCompleteMsg(main$: DataMain$, foundDocuments = true) { */ export function sendPartialMsg(main$: DataMain$) { if (main$.getValue().fetchStatus === FetchStatus.LOADING) { - const recordRawType = main$.getValue().recordRawType; - main$.next({ - fetchStatus: FetchStatus.PARTIAL, - recordRawType, - }); + main$.next({ fetchStatus: FetchStatus.PARTIAL }); } } @@ -64,13 +53,10 @@ export function sendPartialMsg(main$: DataMain$) { */ export function sendLoadingMsg( data$: BehaviorSubject, - props: Omit + props?: Omit ) { if (data$.getValue().fetchStatus !== FetchStatus.LOADING) { - data$.next({ - ...props, - fetchStatus: FetchStatus.LOADING, - } as T); + data$.next({ ...props, fetchStatus: FetchStatus.LOADING } as T); } } @@ -79,10 +65,7 @@ export function sendLoadingMsg( */ export function sendLoadingMoreMsg(documents$: DataDocuments$) { if (documents$.getValue().fetchStatus !== FetchStatus.LOADING_MORE) { - documents$.next({ - ...documents$.getValue(), - fetchStatus: FetchStatus.LOADING_MORE, - }); + documents$.next({ ...documents$.getValue(), fetchStatus: FetchStatus.LOADING_MORE }); } } @@ -116,38 +99,17 @@ export function sendLoadingMoreFinishedMsg( * Send ERROR message */ export function sendErrorMsg(data$: DataMain$ | DataDocuments$ | DataTotalHits$, error?: Error) { - const recordRawType = data$.getValue().recordRawType; - data$.next({ - fetchStatus: FetchStatus.ERROR, - error, - recordRawType, - }); + data$.next({ fetchStatus: FetchStatus.ERROR, error }); } /** * Sends a RESET message to all data subjects * Needed when data view is switched or a new runtime field is added */ -export function sendResetMsg( - data: SavedSearchData, - initialFetchStatus: FetchStatus, - recordRawType: RecordRawType -) { - data.main$.next({ - fetchStatus: initialFetchStatus, - foundDocuments: undefined, - recordRawType, - }); - data.documents$.next({ - fetchStatus: initialFetchStatus, - result: [], - recordRawType, - }); - data.totalHits$.next({ - fetchStatus: initialFetchStatus, - result: undefined, - recordRawType, - }); +export function sendResetMsg(data: SavedSearchData, initialFetchStatus: FetchStatus) { + data.main$.next({ fetchStatus: initialFetchStatus, foundDocuments: undefined }); + data.documents$.next({ fetchStatus: initialFetchStatus, result: [] }); + data.totalHits$.next({ fetchStatus: initialFetchStatus, result: undefined }); } /** diff --git a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.test.ts b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.test.ts index ac022d58753598..67586670c01c46 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.test.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.test.ts @@ -10,9 +10,8 @@ import { waitFor } from '@testing-library/react'; import { buildDataTableRecord } from '@kbn/discover-utils'; import { dataViewMock, esHitsMockWithSort } from '@kbn/discover-utils/src/__mocks__'; import { discoverServiceMock } from '../../../__mocks__/services'; -import { savedSearchMockWithESQL } from '../../../__mocks__/saved_search'; import { FetchStatus } from '../../types'; -import { DataDocuments$, RecordRawType } from './discover_data_state_container'; +import { DataDocuments$ } from './discover_data_state_container'; import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock'; import { fetchDocuments } from '../data_fetching/fetch_documents'; @@ -92,23 +91,13 @@ describe('test getDataStateContainer', () => { await waitFor(() => { expect(dataState.data$.main$.value.fetchStatus).toBe(FetchStatus.COMPLETE); }); - dataState.reset(stateContainer.savedSearchState.getState()); + dataState.reset(); await waitFor(() => { expect(dataState.data$.main$.value.fetchStatus).toBe(FetchStatus.LOADING); }); unsubscribe(); }); - test('useSavedSearch returns plain record raw type', async () => { - const stateContainer = getDiscoverStateMock({ - savedSearch: savedSearchMockWithESQL, - }); - stateContainer.savedSearchState.load = jest.fn().mockResolvedValue(savedSearchMockWithESQL); - await stateContainer.actions.loadSavedSearch({ savedSearchId: savedSearchMockWithESQL.id }); - - expect(stateContainer.dataState.data$.main$.getValue().recordRawType).toBe(RecordRawType.PLAIN); - }); - test('refetch$ accepts "fetch_more" signal', (done) => { const records = esHitsMockWithSort.map((hit) => buildDataTableRecord(hit, dataViewMock)); const initialRecords = [records[0], records[1]]; diff --git a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts index 203bd87ec84f12..71ad2ed87e79bb 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts @@ -5,21 +5,20 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { BehaviorSubject, filter, map, mergeMap, Observable, share, Subject, tap } from 'rxjs'; import type { AutoRefreshDoneFn } from '@kbn/data-plugin/public'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { SavedSearch } from '@kbn/saved-search-plugin/public'; -import { AggregateQuery, Query } from '@kbn/es-query'; +import { AggregateQuery, isOfAggregateQueryType, Query } from '@kbn/es-query'; import type { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { DataView } from '@kbn/data-views-plugin/common'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import type { SearchResponseWarning } from '@kbn/search-response-warnings'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { SEARCH_FIELDS_FROM_SOURCE, SEARCH_ON_PAGE_LOAD_SETTING } from '@kbn/discover-utils'; -import { getDataViewByTextBasedQueryLang } from './utils/get_data_view_by_text_based_query_lang'; -import { isTextBasedQuery } from '../utils/is_text_based_query'; -import { getRawRecordType } from '../utils/get_raw_record_type'; +import { getEsqlDataView } from './utils/get_esql_data_view'; import { DiscoverAppState } from './discover_app_state_container'; import { DiscoverServices } from '../../../build_services'; import { DiscoverSearchSessionManager } from './discover_search_session'; @@ -51,23 +50,11 @@ export type DataFetch$ = Observable<{ export type DataRefetch$ = Subject; -export enum RecordRawType { - /** - * Documents returned Elasticsearch, nested structure - */ - DOCUMENT = 'document', - /** - * Data returned e.g. ES|QL queries, flat structure - * */ - PLAIN = 'plain', -} - export type DataRefetchMsg = 'reset' | 'fetch_more' | undefined; export interface DataMsg { fetchStatus: FetchStatus; error?: Error; - recordRawType?: RecordRawType; query?: AggregateQuery | Query | undefined; } @@ -77,8 +64,8 @@ export interface DataMainMsg extends DataMsg { export interface DataDocumentsMsg extends DataMsg { result?: DataTableRecord[]; - textBasedQueryColumns?: DatatableColumn[]; // columns from text-based request - textBasedHeaderWarning?: string; + esqlQueryColumns?: DatatableColumn[]; // columns from ES|QL request + esqlHeaderWarning?: string; interceptedWarnings?: SearchResponseWarning[]; // warnings (like shard failures) } @@ -122,7 +109,7 @@ export interface DiscoverDataStateContainer { /** * resetting all data observable to initial state */ - reset: (savedSearch: SavedSearch) => void; + reset: () => void; /** * cancels the running queries @@ -168,8 +155,7 @@ export function getDataStateContainer({ const { data, uiSettings, toastNotifications } = services; const { timefilter } = data.query.timefilter; const inspectorAdapters = { requests: new RequestAdapter() }; - const appState = getAppState(); - const recordRawType = getRawRecordType(appState.query); + /** * The observable to trigger data fetching in UI * By refetch$.next('reset') rows and fieldcounts are reset to allow e.g. editing of runtime fields @@ -189,7 +175,7 @@ export function getDataStateContainer({ * The observables the UI (aka React component) subscribes to get notified about * the changes in the data fetching process (high level: fetching started, data was received) */ - const initialState = { fetchStatus: getInitialFetchStatus(), recordRawType }; + const initialState = { fetchStatus: getInitialFetchStatus() }; const dataSubjects: SavedSearchData = { main$: new BehaviorSubject(initialState), documents$: new BehaviorSubject(initialState), @@ -300,8 +286,8 @@ export function getDataStateContainer({ const query = getAppState().query; const currentDataView = getSavedSearch().searchSource.getField('index'); - if (isTextBasedQuery(query)) { - const nextDataView = await getDataViewByTextBasedQueryLang(query, currentDataView, services); + if (isOfAggregateQueryType(query)) { + const nextDataView = await getEsqlDataView(query, currentDataView, services); if (nextDataView !== currentDataView) { setDataView(nextDataView); } @@ -320,9 +306,8 @@ export function getDataStateContainer({ return refetch$; }; - const reset = (savedSearch: SavedSearch) => { - const recordType = getRawRecordType(savedSearch.searchSource.getField('query')); - sendResetMsg(dataSubjects, getInitialFetchStatus(), recordType); + const reset = () => { + sendResetMsg(dataSubjects, getInitialFetchStatus()); }; const cancel = () => { diff --git a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts index fbd324a1a417c7..5c71311377595a 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { isEqual } from 'lodash'; import type { DiscoverInternalStateContainer } from '../discover_internal_state_container'; import type { DiscoverServices } from '../../../../build_services'; @@ -17,7 +18,6 @@ import { isEqualState, } from '../discover_app_state_container'; import { addLog } from '../../../../utils/add_log'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { FetchStatus } from '../../../types'; import { loadAndResolveDataView } from './resolve_data_view'; import { @@ -52,11 +52,11 @@ export const buildStateSubscribe = const nextQuery = nextState.query; const savedSearch = savedSearchState.getState(); const prevQuery = savedSearch.searchSource.getField('query'); - const isTextBasedQueryLang = isTextBasedQuery(nextQuery); + const isEsqlMode = isDataSourceType(nextState.dataSource, DataSourceType.Esql); const queryChanged = !isEqual(nextQuery, prevQuery) || !isEqual(nextQuery, prevState.query); if ( - isTextBasedQueryLang && + isEsqlMode && isEqualState(prevState, nextState, ['dataSource', 'viewMode']) && !queryChanged ) { @@ -73,11 +73,11 @@ export const buildStateSubscribe = addLog('[appstate] subscribe triggered', nextState); - if (isTextBasedQueryLang) { - const isTextBasedQueryLangPrev = isTextBasedQuery(prevQuery); - if (!isTextBasedQueryLangPrev) { + if (isEsqlMode) { + const isEsqlModePrev = isDataSourceType(prevState.dataSource, DataSourceType.Esql); + if (!isEsqlModePrev) { savedSearchState.update({ nextState }); - dataState.reset(savedSearch); + dataState.reset(); } } @@ -85,11 +85,11 @@ export const buildStateSubscribe = // Cast to boolean to avoid false positives when comparing // undefined and false, which would trigger a refetch const chartDisplayChanged = Boolean(nextState.hideChart) !== Boolean(hideChart); - const chartIntervalChanged = nextState.interval !== interval && !isTextBasedQueryLang; + const chartIntervalChanged = nextState.interval !== interval && !isEsqlMode; const breakdownFieldChanged = nextState.breakdownField !== breakdownField; const sampleSizeChanged = nextState.sampleSize !== sampleSize; - const docTableSortChanged = !isEqual(nextState.sort, sort) && !isTextBasedQueryLang; - const dataSourceChanged = !isEqual(nextState.dataSource, dataSource) && !isTextBasedQueryLang; + const docTableSortChanged = !isEqual(nextState.sort, sort) && !isEsqlMode; + const dataSourceChanged = !isEqual(nextState.dataSource, dataSource) && !isEsqlMode; let savedSearchDataView; @@ -100,7 +100,7 @@ export const buildStateSubscribe = : undefined; const { dataView: nextDataView, fallback } = await loadAndResolveDataView( - { id: dataViewId, savedSearch, isTextBasedQuery: isTextBasedQueryLang }, + { id: dataViewId, savedSearch, isEsqlMode }, { internalStateContainer: internalState, services } ); @@ -120,7 +120,7 @@ export const buildStateSubscribe = } savedSearch.searchSource.setField('index', nextDataView); - dataState.reset(savedSearch); + dataState.reset(); setDataView(nextDataView); savedSearchDataView = nextDataView; } diff --git a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts index ebf5f8dc90bd39..861c85ee20e658 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { isOfAggregateQueryType } from '@kbn/es-query'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { DiscoverAppState, AppStateUrl } from '../discover_app_state_container'; @@ -20,12 +21,11 @@ export function cleanupUrlState( appStateFromUrl: AppStateUrl, uiSettings: IUiSettingsClient ): DiscoverAppState { - if ( - appStateFromUrl.query && - !isOfAggregateQueryType(appStateFromUrl.query) && - !appStateFromUrl.query.language - ) { - appStateFromUrl.query = migrateLegacyQuery(appStateFromUrl.query); + const query = appStateFromUrl.query; + const isEsqlQuery = isOfAggregateQueryType(query); + + if (!isEsqlQuery && query && !query.language) { + appStateFromUrl.query = migrateLegacyQuery(query); } if (typeof appStateFromUrl.sort?.[0] === 'string') { @@ -53,7 +53,7 @@ export function cleanupUrlState( if ( appStateFromUrl.sampleSize && - (isOfAggregateQueryType(appStateFromUrl.query) || // not supported yet for ES|QL + (isEsqlQuery || // not supported yet for ES|QL !( typeof appStateFromUrl.sampleSize === 'number' && appStateFromUrl.sampleSize > 0 && @@ -67,7 +67,7 @@ export function cleanupUrlState( if (appStateFromUrl.index) { if (!appStateFromUrl.dataSource) { // Convert the provided index to a data source - appStateFromUrl.dataSource = isOfAggregateQueryType(appStateFromUrl.query) + appStateFromUrl.dataSource = isEsqlQuery ? createEsqlDataSource() : createDataViewDataSource({ dataViewId: appStateFromUrl.index }); } diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.test.ts b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.test.ts similarity index 81% rename from src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.test.ts rename to src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.test.ts index b8053c47fd174c..81189661b543b8 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.test.ts @@ -6,12 +6,12 @@ * Side Public License, v 1. */ -import { getDataViewByTextBasedQueryLang } from './get_data_view_by_text_based_query_lang'; +import { getEsqlDataView } from './get_esql_data_view'; import { dataViewAdHoc } from '../../../../__mocks__/data_view_complex'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { discoverServiceMock } from '../../../../__mocks__/services'; -describe('getDataViewByTextBasedQueryLang', () => { +describe('getEsqlDataView', () => { discoverServiceMock.dataViews.create = jest.fn().mockReturnValue({ ...dataViewMock, isPersisted: () => false, @@ -21,13 +21,13 @@ describe('getDataViewByTextBasedQueryLang', () => { const services = discoverServiceMock; it('returns the current dataview if is adhoc and query has not changed', async () => { const query = { esql: 'from data-view-ad-hoc-title' }; - const dataView = await getDataViewByTextBasedQueryLang(query, dataViewAdHoc, services); + const dataView = await getEsqlDataView(query, dataViewAdHoc, services); expect(dataView).toStrictEqual(dataViewAdHoc); }); it('creates an adhoc dataview if the current dataview is persistent and query has not changed', async () => { const query = { esql: 'from the-data-view-title' }; - const dataView = await getDataViewByTextBasedQueryLang(query, dataViewMock, services); + const dataView = await getEsqlDataView(query, dataViewMock, services); expect(dataView.isPersisted()).toEqual(false); expect(dataView.timeFieldName).toBe('@timestamp'); }); @@ -41,7 +41,7 @@ describe('getDataViewByTextBasedQueryLang', () => { timeFieldName: undefined, }); const query = { esql: 'from the-data-view-title' }; - const dataView = await getDataViewByTextBasedQueryLang(query, dataViewAdHoc, services); + const dataView = await getEsqlDataView(query, dataViewAdHoc, services); expect(dataView.isPersisted()).toEqual(false); expect(dataView.timeFieldName).toBeUndefined(); }); @@ -55,7 +55,7 @@ describe('getDataViewByTextBasedQueryLang', () => { timeFieldName: undefined, }); const query = { esql: 'ROW x = "ES|QL is awesome"' }; - const dataView = await getDataViewByTextBasedQueryLang(query, dataViewAdHoc, services); + const dataView = await getEsqlDataView(query, dataViewAdHoc, services); expect(dataView.isPersisted()).toEqual(false); expect(dataView.name).toEqual(dataViewAdHoc.name); expect(dataView.timeFieldName).toBeUndefined(); diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.ts b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts similarity index 96% rename from src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.ts rename to src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts index db964c073a253e..c4dd4d7e163b81 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_data_view_by_text_based_query_lang.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts @@ -10,7 +10,7 @@ import { getESQLAdHocDataview, getIndexPatternFromESQLQuery } from '@kbn/esql-ut import { DataView } from '@kbn/data-views-plugin/common'; import { DiscoverServices } from '../../../../build_services'; -export async function getDataViewByTextBasedQueryLang( +export async function getEsqlDataView( query: AggregateQuery, currentDataView: DataView | undefined, services: DiscoverServices diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts index 5e070ef099cde9..ac85a24f91f34f 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts @@ -98,24 +98,24 @@ describe('getStateDefaults', () => { }); expect(actualForUndefinedViewMode.viewMode).toBeUndefined(); - const actualForTextBasedWithInvalidViewMode = getStateDefaults({ + const actualForEsqlWithInvalidViewMode = getStateDefaults({ services: discoverServiceMock, savedSearch: { ...savedSearchMockWithESQL, viewMode: VIEW_MODE.AGGREGATED_LEVEL, }, }); - expect(actualForTextBasedWithInvalidViewMode.viewMode).toBe(VIEW_MODE.DOCUMENT_LEVEL); + expect(actualForEsqlWithInvalidViewMode.viewMode).toBe(VIEW_MODE.DOCUMENT_LEVEL); - const actualForTextBasedWithValidViewMode = getStateDefaults({ + const actualForEsqlWithValidViewMode = getStateDefaults({ services: discoverServiceMock, savedSearch: { ...savedSearchMockWithESQL, viewMode: VIEW_MODE.DOCUMENT_LEVEL, }, }); - expect(actualForTextBasedWithValidViewMode.viewMode).toBe(VIEW_MODE.DOCUMENT_LEVEL); - expect(actualForTextBasedWithValidViewMode.dataSource).toEqual(createEsqlDataSource()); + expect(actualForEsqlWithValidViewMode.viewMode).toBe(VIEW_MODE.DOCUMENT_LEVEL); + expect(actualForEsqlWithValidViewMode.dataSource).toEqual(createEsqlDataSource()); const actualForWithValidViewMode = getStateDefaults({ services: discoverServiceMock, @@ -133,11 +133,11 @@ describe('getStateDefaults', () => { }); test('should return expected dataSource', () => { - const actualForTextBased = getStateDefaults({ + const actualForEsql = getStateDefaults({ services: discoverServiceMock, savedSearch: savedSearchMockWithESQL, }); - expect(actualForTextBased.dataSource).toMatchInlineSnapshot(` + expect(actualForEsql.dataSource).toMatchInlineSnapshot(` Object { "type": "esql", } diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts index 7a1f2734aa7c89..7e44adf64dbc1d 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts @@ -16,16 +16,12 @@ import { SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; +import { isOfAggregateQueryType } from '@kbn/es-query'; import { DiscoverAppState } from '../discover_app_state_container'; import { DiscoverServices } from '../../../../build_services'; import { getDefaultSort, getSortArray } from '../../../../utils/sorting'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { getValidViewMode } from '../../utils/get_valid_view_mode'; -import { - createDataViewDataSource, - createEsqlDataSource, - DiscoverDataSource, -} from '../../../../../common/data_sources'; +import { createDataViewDataSource, createEsqlDataSource } from '../../../../../common/data_sources'; function getDefaultColumns(savedSearch: SavedSearch, uiSettings: IUiSettingsClient) { if (savedSearch.columns && savedSearch.columns.length > 0) { @@ -51,11 +47,11 @@ export function getStateDefaults({ const { data, uiSettings, storage } = services; const dataView = searchSource.getField('index'); const query = searchSource.getField('query') || data.query.queryString.getDefaultQuery(); - const isTextBasedQueryMode = isTextBasedQuery(query); - const sort = getSortArray(savedSearch.sort ?? [], dataView!, isTextBasedQueryMode); + const isEsqlQuery = isOfAggregateQueryType(query); + const sort = getSortArray(savedSearch.sort ?? [], dataView!, isEsqlQuery); const columns = getDefaultColumns(savedSearch, uiSettings); const chartHidden = getChartHidden(storage, 'discover'); - const dataSource: DiscoverDataSource | undefined = isTextBasedQueryMode + const dataSource = isEsqlQuery ? createEsqlDataSource() : dataView?.id ? createDataViewDataSource({ dataViewId: dataView.id }) @@ -68,7 +64,7 @@ export function getStateDefaults({ dataView, uiSettings.get(SORT_DEFAULT_ORDER_SETTING, 'desc'), uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false), - isTextBasedQueryMode + isEsqlQuery ) : sort, columns, @@ -102,7 +98,7 @@ export function getStateDefaults({ if (savedSearch.viewMode) { defaultState.viewMode = getValidViewMode({ viewMode: savedSearch.viewMode, - isTextBasedQueryMode, + isEsqlMode: isEsqlQuery, }); } if (savedSearch.hideAggregatedPreview) { diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts b/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts index c06cb3b67f2353..0960471c4a6dcb 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts @@ -39,9 +39,9 @@ export function getDataViewAppState( ); } - const isTextBasedQueryMode = isOfAggregateQueryType(query); + const isEsqlQuery = isOfAggregateQueryType(query); - if (isTextBasedQueryMode) { + if (isEsqlQuery) { columns = []; } @@ -49,7 +49,7 @@ export function getDataViewAppState( // filter out sorting by timeField in case it is set. data views without timeField don't // prepend this field in the table, so in legacy grid you would need to add this column to // remove sorting - let nextSort = getSortArray(currentSort, nextDataView, isTextBasedQueryMode).filter((value) => { + let nextSort = getSortArray(currentSort, nextDataView, isEsqlQuery).filter((value) => { return nextDataView.timeFieldName || value[0] !== currentDataView.timeFieldName; }); diff --git a/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts b/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts index 0997f0f58b0aa9..6a6d55535f47a1 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts @@ -5,10 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import type { SavedSearch } from '@kbn/saved-search-plugin/public'; import { cloneDeep, isEqual } from 'lodash'; -import { getDataViewByTextBasedQueryLang } from './get_data_view_by_text_based_query_lang'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; +import { isOfAggregateQueryType } from '@kbn/es-query'; +import { getEsqlDataView } from './get_esql_data_view'; import { loadAndResolveDataView } from './resolve_data_view'; import { DiscoverInternalStateContainer } from '../discover_internal_state_container'; import { DiscoverDataStateContainer } from '../discover_data_state_container'; @@ -160,7 +161,7 @@ function updateBySavedSearch(savedSearch: SavedSearch, deps: LoadSavedSearchDeps } // Finally notify dataStateContainer, data.query and filterManager about new derived state - dataStateContainer.reset(savedSearch); + dataStateContainer.reset(); // set data service filters const filters = savedSearch.searchSource.getField('filter'); if (Array.isArray(filters) && filters.length) { @@ -204,14 +205,14 @@ const getStateDataView = async ( } ) => { const { dataView, dataViewSpec } = params; - const isTextBased = isTextBasedQuery(query); + const isEsqlQuery = isOfAggregateQueryType(query); if (dataView) { return dataView; } - if (isTextBased) { - return await getDataViewByTextBasedQueryLang(query, dataView, services); + if (isEsqlQuery) { + return await getEsqlDataView(query, dataView, services); } const result = await loadAndResolveDataView( @@ -219,7 +220,7 @@ const getStateDataView = async ( id: dataViewId, dataViewSpec, savedSearch, - isTextBasedQuery: isTextBased, + isEsqlMode: isEsqlQuery, }, { services, internalStateContainer } ); diff --git a/src/plugins/discover/public/application/main/state_management/utils/resolve_data_view.ts b/src/plugins/discover/public/application/main/state_management/utils/resolve_data_view.ts index 031193c93cba58..55e18899a4e33e 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/resolve_data_view.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/resolve_data_view.ts @@ -115,7 +115,7 @@ export function resolveDataView( ip: DataViewData, savedSearch: SavedSearch | undefined, toastNotifications: ToastsStart, - isTextBasedQuery?: boolean + isEsqlMode?: boolean ) { const { loaded: loadedDataView, stateVal, stateValFound } = ip; @@ -126,8 +126,8 @@ export function resolveDataView( return ownDataView; } - // no warnings for text based mode - if (stateVal && !stateValFound && !Boolean(isTextBasedQuery)) { + // no warnings for ES|QL mode + if (stateVal && !stateValFound && !Boolean(isEsqlMode)) { const warningTitle = i18n.translate('discover.valueIsNotConfiguredDataViewIDWarningTitle', { defaultMessage: '{stateVal} is not a configured data view ID', values: { @@ -172,12 +172,12 @@ export const loadAndResolveDataView = async ( id, dataViewSpec, savedSearch, - isTextBasedQuery, + isEsqlMode, }: { id?: string; dataViewSpec?: DataViewSpec; savedSearch?: SavedSearch; - isTextBasedQuery?: boolean; + isEsqlMode?: boolean; }, { internalStateContainer, @@ -198,7 +198,7 @@ export const loadAndResolveDataView = async ( nextDataViewData, savedSearch, services.toastNotifications, - isTextBasedQuery + isEsqlMode ); return { fallback: !nextDataViewData.stateValFound, dataView: nextDataView }; }; diff --git a/src/plugins/discover/public/application/main/state_management/utils/update_saved_search.ts b/src/plugins/discover/public/application/main/state_management/utils/update_saved_search.ts index ad47bb021ea718..19a5cd6c7fb887 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/update_saved_search.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/update_saved_search.ts @@ -5,13 +5,14 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/common'; import { cloneDeep } from 'lodash'; -import { isTextBasedQuery } from '../../utils/is_text_based_query'; import type { DiscoverAppState } from '../discover_app_state_container'; import type { DiscoverServices } from '../../../../build_services'; import type { DiscoverGlobalStateContainer } from '../discover_global_state_container'; +import { DataSourceType, isDataSourceType } from '../../../../../common/data_sources'; /** * Updates the saved search with a given data view & Appstate @@ -76,11 +77,11 @@ export function updateSavedSearch({ savedSearch.breakdownField = state.breakdownField || undefined; // `undefined` instead of an empty string savedSearch.hideAggregatedPreview = state.hideAggregatedPreview; - // add a flag here to identify text based language queries + // add a flag here to identify ES|QL queries // these should be filtered out from the visualize editor - const isTextBasedQueryResult = isTextBasedQuery(state.query); - if (savedSearch.isTextBasedQuery || isTextBasedQueryResult) { - savedSearch.isTextBasedQuery = isTextBasedQueryResult; + const isEsqlMode = isDataSourceType(state.dataSource, DataSourceType.Esql); + if (savedSearch.isTextBasedQuery || isEsqlMode) { + savedSearch.isTextBasedQuery = isEsqlMode; } } diff --git a/src/plugins/discover/public/application/main/utils/get_raw_record_type.test.ts b/src/plugins/discover/public/application/main/utils/get_raw_record_type.test.ts deleted file mode 100644 index 9626c2d1caad16..00000000000000 --- a/src/plugins/discover/public/application/main/utils/get_raw_record_type.test.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 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 { RecordRawType } from '../state_management/discover_data_state_container'; -import { getRawRecordType } from './get_raw_record_type'; - -describe('getRawRecordType', () => { - it('returns empty string for Query type query', () => { - const mode = getRawRecordType({ query: '', language: 'lucene' }); - expect(mode).toEqual(RecordRawType.DOCUMENT); - }); - - it('returns esql for Query type query', () => { - const mode = getRawRecordType({ esql: 'from foo' }); - - expect(mode).toEqual(RecordRawType.PLAIN); - }); -}); diff --git a/src/plugins/discover/public/application/main/utils/get_raw_record_type.ts b/src/plugins/discover/public/application/main/utils/get_raw_record_type.ts deleted file mode 100644 index 3a96973adfbacf..00000000000000 --- a/src/plugins/discover/public/application/main/utils/get_raw_record_type.ts +++ /dev/null @@ -1,18 +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 { AggregateQuery, Query, isOfAggregateQueryType } from '@kbn/es-query'; -import { RecordRawType } from '../state_management/discover_data_state_container'; - -export function getRawRecordType(query?: Query | AggregateQuery) { - if (query && isOfAggregateQueryType(query)) { - return RecordRawType.PLAIN; - } - - return RecordRawType.DOCUMENT; -} diff --git a/src/plugins/discover/public/application/main/utils/get_valid_view_mode.test.ts b/src/plugins/discover/public/application/main/utils/get_valid_view_mode.test.ts index 33431ba09b7c5e..51530926defbfc 100644 --- a/src/plugins/discover/public/application/main/utils/get_valid_view_mode.test.ts +++ b/src/plugins/discover/public/application/main/utils/get_valid_view_mode.test.ts @@ -14,44 +14,44 @@ describe('getValidViewMode', () => { expect( getValidViewMode({ viewMode: undefined, - isTextBasedQueryMode: false, + isEsqlMode: false, }) ).toBeUndefined(); expect( getValidViewMode({ viewMode: VIEW_MODE.DOCUMENT_LEVEL, - isTextBasedQueryMode: false, + isEsqlMode: false, }) ).toBe(VIEW_MODE.DOCUMENT_LEVEL); expect( getValidViewMode({ viewMode: VIEW_MODE.AGGREGATED_LEVEL, - isTextBasedQueryMode: false, + isEsqlMode: false, }) ).toBe(VIEW_MODE.AGGREGATED_LEVEL); }); - test('should work correctly for text-based mode', () => { + test('should work correctly for ES|QL mode', () => { expect( getValidViewMode({ viewMode: undefined, - isTextBasedQueryMode: true, + isEsqlMode: true, }) ).toBeUndefined(); expect( getValidViewMode({ viewMode: VIEW_MODE.DOCUMENT_LEVEL, - isTextBasedQueryMode: true, + isEsqlMode: true, }) ).toBe(VIEW_MODE.DOCUMENT_LEVEL); expect( getValidViewMode({ viewMode: VIEW_MODE.AGGREGATED_LEVEL, - isTextBasedQueryMode: true, + isEsqlMode: true, }) ).toBe(VIEW_MODE.DOCUMENT_LEVEL); }); diff --git a/src/plugins/discover/public/application/main/utils/get_valid_view_mode.ts b/src/plugins/discover/public/application/main/utils/get_valid_view_mode.ts index 4d6d660c28eef6..eab9677f083b2b 100644 --- a/src/plugins/discover/public/application/main/utils/get_valid_view_mode.ts +++ b/src/plugins/discover/public/application/main/utils/get_valid_view_mode.ts @@ -11,17 +11,17 @@ import { VIEW_MODE } from '@kbn/saved-search-plugin/public'; /** * Returns a valid view mode * @param viewMode - * @param isTextBasedQueryMode + * @param isEsqlMode */ export const getValidViewMode = ({ viewMode, - isTextBasedQueryMode, + isEsqlMode, }: { viewMode?: VIEW_MODE; - isTextBasedQueryMode: boolean; + isEsqlMode: boolean; }): VIEW_MODE | undefined => { - if (viewMode === VIEW_MODE.AGGREGATED_LEVEL && isTextBasedQueryMode) { - // only this mode is supported for text-based languages + if (viewMode === VIEW_MODE.AGGREGATED_LEVEL && isEsqlMode) { + // only this mode is supported for ES|QL languages return VIEW_MODE.DOCUMENT_LEVEL; } diff --git a/src/plugins/discover/public/application/main/utils/is_text_based_query.test.ts b/src/plugins/discover/public/application/main/utils/is_text_based_query.test.ts deleted file mode 100644 index 130007c55fc71d..00000000000000 --- a/src/plugins/discover/public/application/main/utils/is_text_based_query.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { isTextBasedQuery } from './is_text_based_query'; - -describe('isTextBasedQuery', () => { - it('should work correctly', () => { - expect(isTextBasedQuery({ query: '', language: 'lucene' })).toEqual(false); - expect(isTextBasedQuery({ esql: 'from foo' })).toEqual(true); - expect(isTextBasedQuery()).toEqual(false); - }); -}); diff --git a/src/plugins/discover/public/application/main/utils/is_text_based_query.ts b/src/plugins/discover/public/application/main/utils/is_text_based_query.ts deleted file mode 100644 index d92433307aaa0c..00000000000000 --- a/src/plugins/discover/public/application/main/utils/is_text_based_query.ts +++ /dev/null @@ -1,18 +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 { AggregateQuery, Query } from '@kbn/es-query'; -import { RecordRawType } from '../state_management/discover_data_state_container'; -import { getRawRecordType } from './get_raw_record_type'; - -/** - * Checks if the query is of AggregateQuery type - * @param query - */ -export function isTextBasedQuery(query?: Query | AggregateQuery): query is AggregateQuery { - return getRawRecordType(query) === RecordRawType.PLAIN; -} diff --git a/src/plugins/discover/public/application/types.ts b/src/plugins/discover/public/application/types.ts index 2b5c85db1e73ae..6fb55945861eb3 100644 --- a/src/plugins/discover/public/application/types.ts +++ b/src/plugins/discover/public/application/types.ts @@ -21,8 +21,8 @@ export enum FetchStatus { export interface RecordsFetchResponse { records: DataTableRecord[]; - textBasedQueryColumns?: DatatableColumn[]; - textBasedHeaderWarning?: string; + esqlQueryColumns?: DatatableColumn[]; + esqlHeaderWarning?: string; interceptedWarnings?: SearchResponseWarning[]; } diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx index 668f4090b3bdd4..3907bc49992329 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx @@ -252,7 +252,7 @@ describe('Discover flyout', function () { expect(props.setExpandedDoc).not.toHaveBeenCalled(); }); - it('should not render single/surrounding views for text based', async () => { + it('should not render single/surrounding views for ES|QL', async () => { const { component } = await mountComponent({ query: { esql: 'FROM indexpattern' }, }); diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx index 012f3674f48f42..5fc88c8442a1a5 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx @@ -27,14 +27,13 @@ import { useEuiTheme, useIsWithinMinBreakpoint, } from '@elastic/eui'; -import type { Filter, Query, AggregateQuery } from '@kbn/es-query'; +import { Filter, Query, AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import type { DataTableColumnsMeta } from '@kbn/unified-data-table'; import { UnifiedDocViewer } from '@kbn/unified-doc-viewer-plugin/public'; import useLocalStorage from 'react-use/lib/useLocalStorage'; import { useDiscoverServices } from '../../hooks/use_discover_services'; -import { isTextBasedQuery } from '../../application/main/utils/is_text_based_query'; import { useFlyoutActions } from './use_flyout_actions'; import { useDiscoverCustomization } from '../../customizations'; import { DiscoverGridFlyoutActions } from './discover_grid_flyout_actions'; @@ -89,8 +88,7 @@ export function DiscoverGridFlyout({ const [flyoutWidth, setFlyoutWidth] = useLocalStorage(FLYOUT_WIDTH_KEY, defaultWidth); const minWidth = euiTheme.base * 24; const maxWidth = euiTheme.breakpoint.xl; - - const isPlainRecord = isTextBasedQuery(query); + const isEsqlQuery = isOfAggregateQueryType(query); // Get actual hit with updated highlighted searches const actualHit = useMemo(() => hits?.find(({ id }) => id === hit?.id) || hit, [hit, hits]); const pageCount = useMemo(() => (hits ? hits.length : 0), [hits]); @@ -173,7 +171,7 @@ export function DiscoverGridFlyout({ hit={actualHit} onAddColumn={addColumn} onRemoveColumn={removeColumn} - textBasedHits={isPlainRecord ? hits : undefined} + textBasedHits={isEsqlQuery ? hits : undefined} docViewsRegistry={flyoutCustomization?.docViewsRegistry} /> ), @@ -184,7 +182,7 @@ export function DiscoverGridFlyout({ columnsMeta, dataView, hits, - isPlainRecord, + isEsqlQuery, onFilter, removeColumn, flyoutCustomization?.docViewsRegistry, @@ -210,8 +208,8 @@ export function DiscoverGridFlyout({ renderDefaultContent() ); - const defaultFlyoutTitle = isPlainRecord - ? i18n.translate('discover.grid.tableRow.docViewerTextBasedDetailHeading', { + const defaultFlyoutTitle = isEsqlQuery + ? i18n.translate('discover.grid.tableRow.docViewerEsqlDetailHeading', { defaultMessage: 'Result', }) : i18n.translate('discover.grid.tableRow.docViewerDetailHeading', { @@ -272,7 +270,7 @@ export function DiscoverGridFlyout({ )} - {isPlainRecord || !flyoutActions.length ? null : ( + {isEsqlQuery || !flyoutActions.length ? null : ( <> diff --git a/src/plugins/discover/public/components/discover_tour/discover_tour.test.tsx b/src/plugins/discover/public/components/discover_tour/discover_tour.test.tsx index 4bdbeaa663818e..5c58201bbf5631 100644 --- a/src/plugins/discover/public/components/discover_tour/discover_tour.test.tsx +++ b/src/plugins/discover/public/components/discover_tour/discover_tour.test.tsx @@ -14,12 +14,16 @@ import { discoverServiceMock } from '../../__mocks__/services'; import { DiscoverTourProvider } from './discover_tour_provider'; import { useDiscoverTourContext } from './discover_tour_context'; import { DISCOVER_TOUR_STEP_ANCHORS } from './discover_tour_anchors'; +import { DiscoverMainProvider } from '../../application/main/state_management/discover_state_provider'; +import { getDiscoverStateMock } from '../../__mocks__/discover_state.mock'; describe('Discover tour', () => { const mountComponent = (innerContent: JSX.Element) => { return mountWithIntl( - {innerContent} + + {innerContent} + ); }; diff --git a/src/plugins/discover/public/components/discover_tour/discover_tour_provider.tsx b/src/plugins/discover/public/components/discover_tour/discover_tour_provider.tsx index 45a870fbc28061..71ed5b85e5ee3e 100644 --- a/src/plugins/discover/public/components/discover_tour/discover_tour_provider.tsx +++ b/src/plugins/discover/public/components/discover_tour/discover_tour_provider.tsx @@ -29,6 +29,7 @@ import { PLUGIN_ID } from '../../../common'; import { useDiscoverServices } from '../../hooks/use_discover_services'; import { DiscoverTourContext, DiscoverTourContextProps } from './discover_tour_context'; import { DISCOVER_TOUR_STEP_ANCHORS } from './discover_tour_anchors'; +import { useIsEsqlMode } from '../../application/main/hooks/use_is_esql_mode'; const MAX_WIDTH = 350; @@ -198,14 +199,9 @@ const tourConfig: EuiTourState = { tourSubtitle: '', }; -export const DiscoverTourProvider = ({ - children, - isPlainRecord, -}: { - children: ReactElement; - isPlainRecord: boolean; -}) => { +export const DiscoverTourProvider = ({ children }: { children: ReactElement }) => { const services = useDiscoverServices(); + const isEsqlMode = useIsEsqlMode(); const prependToBasePath = services.core.http.basePath.prepend; const getAssetPath = useCallback( (imageName: string) => { @@ -215,13 +211,13 @@ export const DiscoverTourProvider = ({ ); const tourSteps = useMemo( () => - isPlainRecord + isEsqlMode ? prepareTourSteps( [ADD_FIELDS_STEP, ORDER_TABLE_COLUMNS_STEP, CHANGE_ROW_HEIGHT_STEP], getAssetPath ) : prepareTourSteps(tourStepDefinitions, getAssetPath), - [getAssetPath, isPlainRecord] + [getAssetPath, isEsqlMode] ); const [steps, actions, reducerState] = useEuiTour(tourSteps, tourConfig); const currentTourStep = reducerState.currentTourStep; diff --git a/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx b/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx index c4e53c265311d6..ad8b1c5a2f547b 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx @@ -125,10 +125,10 @@ describe('Doc table row component', () => { expect(findTestSubject(component, 'docTableRowDetailsTitle').exists()).toBeTruthy(); }); - it('should hide the single/surrounding views for text based languages', () => { + it('should hide the single/surrounding views for ES|QL mode', () => { const props = { ...defaultProps, - isPlainRecord: true, + isEsqlMode: true, }; const component = mountComponent(props); const toggleButton = findTestSubject(component, 'docTableExpandToggleColumn'); diff --git a/src/plugins/discover/public/components/doc_table/components/table_row.tsx b/src/plugins/discover/public/components/doc_table/components/table_row.tsx index 7c9d55e7049bf6..18790ace55289e 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_row.tsx @@ -34,7 +34,7 @@ export interface TableRowProps { columns: string[]; filter?: DocViewFilterFn; filters?: Filter[]; - isPlainRecord?: boolean; + isEsqlMode?: boolean; savedSearchId?: string; row: DataTableRecord; rows: DataTableRecord[]; @@ -47,7 +47,7 @@ export interface TableRowProps { export const TableRow = ({ filters, - isPlainRecord, + isEsqlMode, columns, filter, savedSearchId, @@ -219,7 +219,7 @@ export const TableRow = ({ columns={columns} filters={filters} savedSearchId={savedSearchId} - isPlainRecord={isPlainRecord} + isEsqlMode={isEsqlMode} > )} diff --git a/src/plugins/discover/public/components/doc_table/components/table_row_details.tsx b/src/plugins/discover/public/components/doc_table/components/table_row_details.tsx index 5a0aea52de3f4e..cd203091e30f72 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row_details.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_row_details.tsx @@ -23,7 +23,7 @@ interface TableRowDetailsProps { dataView: DataView; filters?: Filter[]; savedSearchId?: string; - isPlainRecord?: boolean; + isEsqlMode?: boolean; } export const TableRowDetails = ({ @@ -36,7 +36,7 @@ export const TableRowDetails = ({ columns, filters, savedSearchId, - isPlainRecord, + isEsqlMode, }: TableRowDetailsProps) => { const { singleDocHref, contextViewHref, onOpenSingleDoc, onOpenContextView } = useNavigationProps( { @@ -60,13 +60,13 @@ export const TableRowDetails = ({

- {isPlainRecord && ( + {isEsqlMode && ( )} - {!isPlainRecord && ( + {!isEsqlMode && ( - {!isPlainRecord && ( + {!isEsqlMode && ( diff --git a/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx b/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx index 491bdd1166ec7f..54622ac546fa33 100644 --- a/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx +++ b/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx @@ -30,7 +30,7 @@ export function DiscoverDocTableEmbeddable(renderProps: DocTableEmbeddableProps) searchDescription={renderProps.searchDescription} sharedItemTitle={renderProps.sharedItemTitle} isLoading={renderProps.isLoading} - isPlainRecord={renderProps.isPlainRecord} + isEsqlMode={renderProps.isEsqlMode} interceptedWarnings={renderProps.interceptedWarnings} /> ); diff --git a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx index 0843d3baec295a..58659b5d4b66af 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx @@ -29,7 +29,7 @@ export interface DocTableEmbeddableProps extends Omit; const DocTableWrapperMemoized = memo(DocTableWrapper); diff --git a/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx b/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx index 5ad815d7c1cc6c..3c9d2fc96ae0d0 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx @@ -62,9 +62,9 @@ export interface DocTableProps { filters?: Filter[]; /** * Flag which identifies if Discover operates - * in text based mode (ESQL) + * in ES|QL mode */ - isPlainRecord?: boolean; + isEsqlMode?: boolean; /** * Saved search id */ @@ -114,7 +114,7 @@ export const DocTableWrapper = forwardRef( render, columns, filters, - isPlainRecord, + isEsqlMode, savedSearchId, rows, dataView, @@ -186,7 +186,7 @@ export const DocTableWrapper = forwardRef( shouldShowFieldHandler={shouldShowFieldHandler} onAddColumn={onAddColumn} onRemoveColumn={onRemoveColumn} - isPlainRecord={isPlainRecord} + isEsqlMode={isEsqlMode} rows={rows} /> )); @@ -201,7 +201,7 @@ export const DocTableWrapper = forwardRef( shouldShowFieldHandler, onAddColumn, onRemoveColumn, - isPlainRecord, + isEsqlMode, rows, ] ); diff --git a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.test.tsx b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.test.tsx index 371ea1f0d06e21..afc59b6e7d0c6b 100644 --- a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.test.tsx +++ b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.test.tsx @@ -23,7 +23,7 @@ describe('Document view mode toggle component', () => { const mountComponent = ({ showFieldStatistics = true, viewMode = VIEW_MODE.DOCUMENT_LEVEL, - isTextBasedQuery = false, + isEsqlMode = false, setDiscoverViewMode = jest.fn(), } = {}) => { const services = { @@ -43,7 +43,7 @@ describe('Document view mode toggle component', () => { @@ -63,8 +63,8 @@ describe('Document view mode toggle component', () => { expect(findTestSubject(component, 'discoverQueryTotalHits').exists()).toBe(true); }); - it('should not render if text-based', () => { - const component = mountComponent({ isTextBasedQuery: true }); + it('should not render if ES|QL', () => { + const component = mountComponent({ isEsqlMode: true }); expect(findTestSubject(component, 'dscViewModeToggle').exists()).toBe(false); expect(findTestSubject(component, 'discoverQueryTotalHits').exists()).toBe(true); }); diff --git a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx index d96249827c3002..b9b036e266b4e4 100644 --- a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx +++ b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx @@ -18,13 +18,13 @@ import { HitsCounter, HitsCounterMode } from '../hits_counter'; export const DocumentViewModeToggle = ({ viewMode, - isTextBasedQuery, + isEsqlMode, prepend, stateContainer, setDiscoverViewMode, }: { viewMode: VIEW_MODE; - isTextBasedQuery: boolean; + isEsqlMode: boolean; prepend?: ReactElement; stateContainer: DiscoverStateContainer; setDiscoverViewMode: (viewMode: VIEW_MODE) => void; @@ -32,8 +32,8 @@ export const DocumentViewModeToggle = ({ const { euiTheme } = useEuiTheme(); const { uiSettings, dataVisualizer: dataVisualizerService } = useDiscoverServices(); const isLegacy = useMemo( - () => isLegacyTableEnabled({ uiSettings, isTextBasedQueryMode: isTextBasedQuery }), - [uiSettings, isTextBasedQuery] + () => isLegacyTableEnabled({ uiSettings, isEsqlMode }), + [uiSettings, isEsqlMode] ); const includesNormalTabsStyle = viewMode === VIEW_MODE.AGGREGATED_LEVEL || isLegacy; @@ -72,7 +72,7 @@ export const DocumentViewModeToggle = ({ )} - {isTextBasedQuery || !showViewModeToggle ? ( + {isEsqlMode || !showViewModeToggle ? ( ) : ( diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index d5aac2dc246a82..06aeaa42c13764 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -13,6 +13,7 @@ import { Query, TimeRange, FilterStateStore, + isOfAggregateQueryType, } from '@kbn/es-query'; import React from 'react'; import ReactDOM, { unmountComponentAtNode } from 'react-dom'; @@ -66,8 +67,7 @@ import { SavedSearchEmbeddableComponent } from './saved_search_embeddable_compon import { handleSourceColumnState } from '../utils/state_helpers'; import { updateSearchSource } from './utils/update_search_source'; import { FieldStatisticsTable } from '../application/main/components/field_stats_table'; -import { fetchTextBased } from '../application/main/data_fetching/fetch_text_based'; -import { isTextBasedQuery } from '../application/main/utils/is_text_based_query'; +import { fetchEsql } from '../application/main/data_fetching/fetch_esql'; import { getValidViewMode } from '../application/main/utils/get_valid_view_mode'; import { ADHOC_DATA_VIEW_RENDER_EVENT } from '../constants'; import { getDiscoverLocatorParams } from './get_discover_locator_params'; @@ -229,9 +229,9 @@ export class SavedSearchEmbeddable return true; } - private isTextBasedSearch = (savedSearch: SavedSearch): boolean => { + private isEsqlMode = (savedSearch: SavedSearch): boolean => { const query = savedSearch.searchSource.getField('query'); - return isTextBasedQuery(query); + return isOfAggregateQueryType(query); }; private getFetchedSampleSize = (searchProps: SearchProps): number => { @@ -302,12 +302,12 @@ export class SavedSearchEmbeddable const query = savedSearch.searchSource.getField('query'); const dataView = savedSearch.searchSource.getField('index')!; - const useTextBased = this.isTextBasedSearch(savedSearch); + const isEsqlMode = this.isEsqlMode(savedSearch); try { - // Request text based data - if (useTextBased && query) { - const result = await fetchTextBased( + // Request ES|QL data + if (isEsqlMode && query) { + const result = await fetchEsql( savedSearch.searchSource.getField('query')!, dataView, this.services.data, @@ -323,8 +323,8 @@ export class SavedSearchEmbeddable loading: false, }); - searchProps.columnsMeta = result.textBasedQueryColumns - ? getTextBasedColumnsMeta(result.textBasedQueryColumns) + searchProps.columnsMeta = result.esqlQueryColumns + ? getTextBasedColumnsMeta(result.esqlQueryColumns) : undefined; searchProps.rows = result.records; searchProps.totalHitCount = result.records.length; @@ -392,9 +392,9 @@ export class SavedSearchEmbeddable private getSort( sort: SortPair[] | undefined, dataView: DataView | undefined, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ) { - return getSortForEmbeddable(sort, dataView, this.services.uiSettings, isTextBasedQueryMode); + return getSortForEmbeddable(sort, dataView, this.services.uiSettings, isEsqlMode); } private initializeSearchEmbeddableProps() { @@ -421,7 +421,7 @@ export class SavedSearchEmbeddable filters: savedSearch.searchSource.getField('filter') as Filter[], dataView, isLoading: false, - sort: this.getSort(savedSearch.sort, dataView, this.isTextBasedSearch(savedSearch)), + sort: this.getSort(savedSearch.sort, dataView, this.isEsqlMode(savedSearch)), rows: [], searchDescription: savedSearch.description, description: savedSearch.description, @@ -460,7 +460,7 @@ export class SavedSearchEmbeddable this.updateInput({ sort: sortOrderArr }); }, // I don't want to create filters when is embedded - ...(!this.isTextBasedSearch(savedSearch) && { + ...(!this.isEsqlMode(savedSearch) && { onFilter: async (field, value, operator) => { let filters = generateFilters( this.services.filterManager, @@ -583,7 +583,7 @@ export class SavedSearchEmbeddable searchProps.sort = this.getSort( this.input.sort || savedSearch.sort, searchProps?.dataView, - this.isTextBasedSearch(savedSearch) + this.isEsqlMode(savedSearch) ); searchProps.sharedItemTitle = this.panelTitleInternal; searchProps.searchTitle = this.panelTitleInternal; @@ -640,10 +640,10 @@ export class SavedSearchEmbeddable return; } - const isTextBasedQueryMode = this.isTextBasedSearch(savedSearch); + const isEsqlMode = this.isEsqlMode(savedSearch); const viewMode = getValidViewMode({ viewMode: savedSearch.viewMode, - isTextBasedQueryMode, + isEsqlMode, }); if ( @@ -680,7 +680,7 @@ export class SavedSearchEmbeddable const useLegacyTable = isLegacyTableEnabled({ uiSettings: this.services.uiSettings, - isTextBasedQueryMode, + isEsqlMode, }); const query = savedSearch.searchSource.getField('query'); const props = { diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx index 7c938db1018ac5..6114adb4145686 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx @@ -7,11 +7,10 @@ */ import React from 'react'; -import { AggregateQuery, Query } from '@kbn/es-query'; +import { AggregateQuery, isOfAggregateQueryType, Query } from '@kbn/es-query'; import { DataLoadingState } from '@kbn/unified-data-table'; import { DiscoverGridEmbeddable } from './saved_search_grid'; import { DiscoverDocTableEmbeddable } from '../components/doc_table/create_doc_table_embeddable'; -import { isTextBasedQuery } from '../application/main/utils/is_text_based_query'; import type { EmbeddableComponentSearchProps } from './types'; interface SavedSearchEmbeddableComponentProps { @@ -31,15 +30,15 @@ export function SavedSearchEmbeddableComponent({ query, }: SavedSearchEmbeddableComponentProps) { if (useLegacyTable) { - const isPlainRecord = isTextBasedQuery(query); return ( ); } + return ( { `); }); - test('fields do not have prepended timeField for text based languages', async () => { + test('fields do not have prepended timeField for ES|QL', async () => { const index = { ...dataViewMock } as DataView; index.timeFieldName = 'cool-timefield'; diff --git a/src/plugins/discover/public/utils/get_sharing_data.ts b/src/plugins/discover/public/utils/get_sharing_data.ts index b32f64cf79fb52..68e889c9b3cb04 100644 --- a/src/plugins/discover/public/utils/get_sharing_data.ts +++ b/src/plugins/discover/public/utils/get_sharing_data.ts @@ -34,7 +34,7 @@ export async function getSharingData( currentSearchSource: ISearchSource, state: DiscoverAppState | SavedSearch, services: { uiSettings: IUiSettingsClient; data: DataPublicPluginStart }, - isPlainRecord?: boolean + isEsqlMode?: boolean ) { const { uiSettings, data } = services; const searchSource = currentSearchSource.createCopy(); @@ -61,7 +61,7 @@ export async function getSharingData( // conditionally add the time field column: let timeFieldName: string | undefined; const hideTimeColumn = uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING); - if (!hideTimeColumn && index && index.timeFieldName && !isPlainRecord) { + if (!hideTimeColumn && index && index.timeFieldName && !isEsqlMode) { timeFieldName = index.timeFieldName; } if (timeFieldName && !columns.includes(timeFieldName)) { diff --git a/src/plugins/discover/public/utils/sorting/get_sort.ts b/src/plugins/discover/public/utils/sorting/get_sort.ts index 74d7fe4b7fb1e8..3c6be442a3c6e6 100644 --- a/src/plugins/discover/public/utils/sorting/get_sort.ts +++ b/src/plugins/discover/public/utils/sorting/get_sort.ts @@ -19,7 +19,7 @@ export function getSortForEmbeddable( sort: SortInput | undefined, dataView: DataView | undefined, uiSettings: IUiSettingsClient | undefined, - isTextBasedQueryMode: boolean + isEsqlMode: boolean ): SortOrder[] { if (!sort || !sort.length || !dataView) { if (!uiSettings) { @@ -27,7 +27,7 @@ export function getSortForEmbeddable( } const defaultSortOrder = uiSettings.get(SORT_DEFAULT_ORDER_SETTING, 'desc'); const hidingTimeColumn = uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false); - return getDefaultSort(dataView, defaultSortOrder, hidingTimeColumn, isTextBasedQueryMode); + return getDefaultSort(dataView, defaultSortOrder, hidingTimeColumn, isEsqlMode); } - return getSortArray(sort, dataView, isTextBasedQueryMode); + return getSortArray(sort, dataView, isEsqlMode); } diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx index 740afc99a9c625..5596ca067df5f6 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx @@ -56,7 +56,7 @@ export const DocViewerSource = ({ const useNewFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE); const useDocExplorer = !isLegacyTableEnabled({ uiSettings, - isTextBasedQueryMode: Array.isArray(textBasedHits), + isEsqlMode: Array.isArray(textBasedHits), }); const [requestState, hit] = useEsDocSearch({ id, diff --git a/src/plugins/unified_doc_viewer/public/plugin.tsx b/src/plugins/unified_doc_viewer/public/plugin.tsx index 1fb690694096d0..5d26f43892ae19 100644 --- a/src/plugins/unified_doc_viewer/public/plugin.tsx +++ b/src/plugins/unified_doc_viewer/public/plugin.tsx @@ -82,7 +82,7 @@ export class UnifiedDocViewerPublicPlugin const LazyDocView = isLegacyTableEnabled({ uiSettings, - isTextBasedQueryMode: Array.isArray(textBasedHits), + isEsqlMode: Array.isArray(textBasedHits), }) ? LazyDocViewerLegacyTable : LazyDocViewerTable; diff --git a/test/functional/apps/discover/group3/_lens_vis.ts b/test/functional/apps/discover/group3/_lens_vis.ts index a01760da646588..cc48864976811e 100644 --- a/test/functional/apps/discover/group3/_lens_vis.ts +++ b/test/functional/apps/discover/group3/_lens_vis.ts @@ -179,7 +179,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - it('should show ESQL histogram for text-based query', async () => { + it('should show ESQL histogram for ES|QL query', async () => { await PageObjects.discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); diff --git a/test/functional/apps/discover/group3/_panels_toggle.ts b/test/functional/apps/discover/group3/_panels_toggle.ts index cbac15a3e45de4..8b19fb5cc83c53 100644 --- a/test/functional/apps/discover/group3/_panels_toggle.ts +++ b/test/functional/apps/discover/group3/_panels_toggle.ts @@ -218,7 +218,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { checkPanelsToggle({ isChartAvailable: false, totalHits: '14,004' }); }); - describe('text-based with histogram chart', function () { + describe('ES|QL with histogram chart', function () { before(async function () { await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); @@ -231,7 +231,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { checkPanelsToggle({ isChartAvailable: true, totalHits: '10' }); }); - describe('text-based with aggs chart', function () { + describe('ES|QL with aggs chart', function () { before(async function () { await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); @@ -249,7 +249,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { checkPanelsToggle({ isChartAvailable: true, totalHits: '5' }); }); - describe('text-based without a time field', function () { + describe('ES|QL without a time field', function () { before(async function () { await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); diff --git a/test/functional/apps/discover/group6/_sidebar.ts b/test/functional/apps/discover/group6/_sidebar.ts index aac4bd60933f02..9f7b35abc85da2 100644 --- a/test/functional/apps/discover/group6/_sidebar.ts +++ b/test/functional/apps/discover/group6/_sidebar.ts @@ -96,7 +96,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - it('should show filters by type in text-based view', async function () { + it('should show filters by type in ES|QL view', async function () { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await PageObjects.unifiedFieldList.openSidebarFieldFilter(); let options = await find.allByCssSelector('[data-test-subj*="typeFilter"]'); @@ -128,7 +128,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - it('should show empty fields in text-based view', async function () { + it('should show empty fields in ES|QL view', async function () { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await PageObjects.discover.selectTextBaseLang(); @@ -427,7 +427,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - it('should show selected and available fields in text-based mode', async function () { + it('should show selected and available fields in ES|QL mode', async function () { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( diff --git a/test/functional/apps/discover/group6/_sidebar_field_stats.ts b/test/functional/apps/discover/group6/_sidebar_field_stats.ts index b2526445f75bff..cbeb128036ab6d 100644 --- a/test/functional/apps/discover/group6/_sidebar_field_stats.ts +++ b/test/functional/apps/discover/group6/_sidebar_field_stats.ts @@ -143,7 +143,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('text based columns', function () { + describe('ES|QL columns', function () { beforeEach(async () => { await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await PageObjects.common.navigateToApp('discover'); diff --git a/test/functional/apps/discover/group6/_time_field_column.ts b/test/functional/apps/discover/group6/_time_field_column.ts index cbcb37a1294e7c..6fe4c244a08b34 100644 --- a/test/functional/apps/discover/group6/_time_field_column.ts +++ b/test/functional/apps/discover/group6/_time_field_column.ts @@ -57,12 +57,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField, hideTimeFieldColumnSetting, savedSearchSuffix, - isTextBased, + isEsqlMode, }: { hasTimeField: boolean; hideTimeFieldColumnSetting: boolean; savedSearchSuffix: string; - isTextBased?: boolean; + isEsqlMode?: boolean; }) { // check in Discover expect(await dataGrid.getHeaderFields()).to.eql( @@ -71,7 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); await PageObjects.discover.waitUntilSearchingHasFinished(); - const isTimestampUnavailableInSidebar = isTextBased && !hasTimeField; + const isTimestampUnavailableInSidebar = isEsqlMode && !hasTimeField; if (!isTimestampUnavailableInSidebar) { await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); await PageObjects.discover.waitUntilSearchingHasFinished(); @@ -137,12 +137,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField, hideTimeFieldColumnSetting, savedSearchSuffix, - isTextBased, + isEsqlMode, }: { hasTimeField: boolean; hideTimeFieldColumnSetting: boolean; savedSearchSuffix: string; - isTextBased?: boolean; + isEsqlMode?: boolean; }) { // check in Discover await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); @@ -150,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField || isTextBased + hideTimeFieldColumnSetting || !hasTimeField || isEsqlMode ? ['bytes', 'extension'] : ['@timestamp', 'bytes', 'extension'] ); @@ -183,7 +183,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.clickFieldListItemRemove('@timestamp'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField || isTextBased + hideTimeFieldColumnSetting || !hasTimeField || isEsqlMode ? ['bytes', 'extension'] : ['@timestamp', 'bytes', 'extension'] ); @@ -199,7 +199,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField || isTextBased + hideTimeFieldColumnSetting || !hasTimeField || isEsqlMode ? ['bytes', 'extension'] : ['@timestamp', 'bytes', 'extension'] ); @@ -292,7 +292,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, hideTimeFieldColumnSetting, savedSearchSuffix: savedSearchSuffix + 'ESQL', - isTextBased: true, + isEsqlMode: true, }); }); @@ -306,7 +306,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: false, hideTimeFieldColumnSetting, savedSearchSuffix: savedSearchSuffix + 'ESQLdrop', - isTextBased: true, + isEsqlMode: true, }); }); @@ -317,7 +317,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, hideTimeFieldColumnSetting, savedSearchSuffix: savedSearchSuffix + 'ESQL', - isTextBased: true, + isEsqlMode: true, }); }); }); diff --git a/test/functional/apps/discover/group6/_view_mode_toggle.ts b/test/functional/apps/discover/group6/_view_mode_toggle.ts index 935b75bf61937c..eada1ec26f7aae 100644 --- a/test/functional/apps/discover/group6/_view_mode_toggle.ts +++ b/test/functional/apps/discover/group6/_view_mode_toggle.ts @@ -99,7 +99,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('dscViewModeToggle'); }); - it('should not show view mode toggle for text-based searches', async () => { + it('should not show view mode toggle for ES|QL searches', async () => { await testSubjects.click('dscViewModeDocumentButton'); await retry.try(async () => { @@ -118,7 +118,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } }); - it('should show text-based columns callout', async () => { + it('should show ES|QL columns callout', async () => { await testSubjects.missingOrFail('dscSelectedColumnsCallout'); await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 103c47a2383579..017acbe3704164 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2278,7 +2278,7 @@ "discover.showingDefaultDataViewWarningDescription": "Affichage de la vue de données par défaut : \"{loadedDataViewTitle}\" ({loadedDataViewId})", "discover.showingSavedDataViewWarningDescription": "Affichage de la vue de données enregistrée : \"{ownDataViewTitle}\" ({ownDataViewId})", "discover.singleDocRoute.errorMessage": "Aucune donnée correspondante pour l'ID {dataViewId}", - "discover.textBasedMode.selectedColumnsCallout": "Affichage de {selectedColumnsNumber} champs sur {textBasedQueryColumnsNumber}. Ajoutez-en d’autres depuis la liste des champs disponibles.", + "discover.esqlMode.selectedColumnsCallout": "Affichage de {selectedColumnsNumber} champs sur {esqlQueryColumnsNumber}. Ajoutez-en d’autres depuis la liste des champs disponibles.", "discover.valueIsNotConfiguredDataViewIDWarningTitle": "{stateVal} n'est pas un ID de vue de données configuré", "discover.viewAlert.dataViewErrorText": "Échec de la vue des données de la règle d'alerte avec l'ID {alertId}.", "discover.advancedSettings.context.defaultSizeText": "Le nombre d'entrées connexes à afficher dans la vue contextuelle", @@ -2414,10 +2414,10 @@ "discover.grid.flyout.toastColumnRemoved": "La colonne \"{columnName}\" a été supprimée.", "discover.grid.tableRow.actionsLabel": "Actions", "discover.grid.tableRow.docViewerDetailHeading": "Document", - "discover.grid.tableRow.docViewerTextBasedDetailHeading": "Ligne", + "discover.grid.tableRow.docViewerEsqlDetailHeading": "Ligne", "discover.grid.tableRow.mobileFlyoutActionsButton": "Actions", "discover.grid.tableRow.moreFlyoutActionsButton": "Plus d'actions", - "discover.grid.tableRow.textBasedDetailHeading": "Ligne développée", + "discover.grid.tableRow.esqlDetailHeading": "Ligne développée", "discover.grid.tableRow.viewSingleDocumentLinkLabel": "Afficher un seul document", "discover.grid.tableRow.viewSurroundingDocumentsHover": "Inspectez des documents qui ont été créés avant et après ce document. Seuls les filtres épinglés restent actifs dans la vue Documents relatifs.", "discover.grid.tableRow.viewSurroundingDocumentsLinkLabel": "Afficher les documents alentour", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0c0fa7527290e6..f03111faf3bd15 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2276,7 +2276,7 @@ "discover.showingDefaultDataViewWarningDescription": "デフォルトデータビューを表示しています:\"{loadedDataViewTitle}\" ({loadedDataViewId})", "discover.showingSavedDataViewWarningDescription": "保存されたデータビューを表示しています:\"{ownDataViewTitle}\" ({ownDataViewId})", "discover.singleDocRoute.errorMessage": "ID {dataViewId}の一致するデータビューが見つかりません", - "discover.textBasedMode.selectedColumnsCallout": "{textBasedQueryColumnsNumber}フィールド中{selectedColumnsNumber}フィールドを表示中です。利用可能なフィールドリストからさらに追加します。", + "discover.esqlMode.selectedColumnsCallout": "{esqlQueryColumnsNumber}フィールド中{selectedColumnsNumber}フィールドを表示中です。利用可能なフィールドリストからさらに追加します。", "discover.valueIsNotConfiguredDataViewIDWarningTitle": "{stateVal}は設定されたデータビューIDではありません", "discover.viewAlert.dataViewErrorText": "id {alertId}のアラートルールのデータビューのエラー。", "discover.advancedSettings.context.defaultSizeText": "コンテキストビューに表示される周りのエントリーの数", @@ -2412,10 +2412,10 @@ "discover.grid.flyout.toastColumnRemoved": "列'{columnName}'が削除されました", "discover.grid.tableRow.actionsLabel": "アクション", "discover.grid.tableRow.docViewerDetailHeading": "ドキュメント", - "discover.grid.tableRow.docViewerTextBasedDetailHeading": "行", + "discover.grid.tableRow.docViewerEsqlDetailHeading": "行", "discover.grid.tableRow.mobileFlyoutActionsButton": "アクション", "discover.grid.tableRow.moreFlyoutActionsButton": "さらにアクションを表示", - "discover.grid.tableRow.textBasedDetailHeading": "展開された行", + "discover.grid.tableRow.esqlDetailHeading": "展開された行", "discover.grid.tableRow.viewSingleDocumentLinkLabel": "単一のドキュメントを表示", "discover.grid.tableRow.viewSurroundingDocumentsHover": "このドキュメントの前後に出現したドキュメントを検査します。周りのドキュメントビューでは、固定されたフィルターのみがアクティブのままです。", "discover.grid.tableRow.viewSurroundingDocumentsLinkLabel": "周りのドキュメントを表示", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b14b4d28e33a93..968e567a714bd5 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2280,7 +2280,7 @@ "discover.showingDefaultDataViewWarningDescription": "正在显示默认数据视图:“{loadedDataViewTitle}”({loadedDataViewId})", "discover.showingSavedDataViewWarningDescription": "正在显示已保存数据视图:“{ownDataViewTitle}”({ownDataViewId})", "discover.singleDocRoute.errorMessage": "没有与 ID {dataViewId} 相匹配的数据视图", - "discover.textBasedMode.selectedColumnsCallout": "正在显示 {selectedColumnsNumber} 个字段,共 {textBasedQueryColumnsNumber} 个。从可用字段列表中添加更多字段。", + "discover.esqlMode.selectedColumnsCallout": "正在显示 {selectedColumnsNumber} 个字段,共 {esqlQueryColumnsNumber} 个。从可用字段列表中添加更多字段。", "discover.valueIsNotConfiguredDataViewIDWarningTitle": "{stateVal} 不是配置的数据视图 ID", "discover.viewAlert.dataViewErrorText": "ID 为 {alertId} 的告警规则的数据视图失败。", "discover.advancedSettings.context.defaultSizeText": "要在上下文视图中显示的周围条目数目", @@ -2416,10 +2416,10 @@ "discover.grid.flyout.toastColumnRemoved": "已移除列“{columnName}”", "discover.grid.tableRow.actionsLabel": "操作", "discover.grid.tableRow.docViewerDetailHeading": "文档", - "discover.grid.tableRow.docViewerTextBasedDetailHeading": "行", + "discover.grid.tableRow.docViewerEsqlDetailHeading": "行", "discover.grid.tableRow.mobileFlyoutActionsButton": "操作", "discover.grid.tableRow.moreFlyoutActionsButton": "更多操作", - "discover.grid.tableRow.textBasedDetailHeading": "已展开行", + "discover.grid.tableRow.esqlDetailHeading": "已展开行", "discover.grid.tableRow.viewSingleDocumentLinkLabel": "查看单个文档", "discover.grid.tableRow.viewSurroundingDocumentsHover": "检查在此文档之前和之后出现的文档。在周围文档视图中,仅已固定筛选仍处于活动状态。", "discover.grid.tableRow.viewSurroundingDocumentsLinkLabel": "查看周围文档", diff --git a/x-pack/test/functional/apps/discover/visualize_field.ts b/x-pack/test/functional/apps/discover/visualize_field.ts index b1eadf89a52978..bb59bbc7af283a 100644 --- a/x-pack/test/functional/apps/discover/visualize_field.ts +++ b/x-pack/test/functional/apps/discover/visualize_field.ts @@ -141,7 +141,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dataViews.waitForSwitcherToBe('logst*'); }); - it('should visualize correctly text based language queries in Discover', async () => { + it('should visualize correctly ES|QL queries in Discover', async () => { await PageObjects.discover.selectTextBaseLang(); await PageObjects.header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( @@ -182,7 +182,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { assertMatchesExpectedData(data!); }); - it('should visualize correctly text based language queries in Lens', async () => { + it('should visualize correctly ES|QL queries in Lens', async () => { await PageObjects.discover.selectTextBaseLang(); await PageObjects.header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( @@ -201,7 +201,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - it('should visualize correctly text based language queries based on index patterns', async () => { + it('should visualize correctly ES|QL queries based on index patterns', async () => { await PageObjects.discover.selectTextBaseLang(); await PageObjects.header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( From dc21c01171828da11d9f1d7583948f72aa1344ba Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Sun, 19 May 2024 01:15:57 -0400 Subject: [PATCH 09/97] [api-docs] 2024-05-19 Daily api_docs build (#183798) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/711 --- api_docs/actions.devdocs.json | 33 ++ api_docs/actions.mdx | 4 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 8 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.devdocs.json | 40 ++ api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...elasticsearch_server_internal.devdocs.json | 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 | 14 +- api_docs/kbn_core_http_server.mdx | 2 +- ...kbn_core_http_server_internal.devdocs.json | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- .../kbn_core_http_server_mocks.devdocs.json | 4 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ..._objects_base_server_internal.devdocs.json | 11 + ...ore_saved_objects_base_server_internal.mdx | 4 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- ..._core_test_helpers_kbn_server.devdocs.json | 21 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 10 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.devdocs.json | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.devdocs.json | 17 +- api_docs/kbn_elastic_assistant.mdx | 4 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.devdocs.json | 525 ++++++++++++++++++ api_docs/kbn_entities_schema.mdx | 36 ++ api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.devdocs.json | 4 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.devdocs.json | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 15 + api_docs/observability_shared.mdx | 4 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 15 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.devdocs.json | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.devdocs.json | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 12 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 712 files changed, 1431 insertions(+), 736 deletions(-) create mode 100644 api_docs/kbn_entities_schema.devdocs.json create mode 100644 api_docs/kbn_entities_schema.mdx diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 351e17acc532c9..621d8237c05039 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2429,6 +2429,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-server.getBasicAuthHeader", + "type": "Function", + "tags": [], + "label": "getBasicAuthHeader", + "description": [], + "signature": [ + "({ username, password }: GetBasicAuthHeaderArgs) => { Authorization: string; }" + ], + "path": "x-pack/plugins/actions/server/lib/get_basic_auth_header.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.getBasicAuthHeader.$1", + "type": "Object", + "tags": [], + "label": "{ username, password }", + "description": [], + "signature": [ + "GetBasicAuthHeaderArgs" + ], + "path": "x-pack/plugins/actions/server/lib/get_basic_auth_header.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-server.urlAllowListValidator", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index bd4c6daf1fec6c..11dd89c47341d8 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 301 | 0 | 295 | 32 | +| 303 | 0 | 297 | 32 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 09e4690e3fdd6c..32724d2ca081dd 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index bc1c1d15d84a67..cced971507bf5e 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 3aace4647dc512..7f1f52aacca2e9 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-05-17 +date: 2024-05-19 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 e7bd15cb4ae467..530bc180929286 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-05-17 +date: 2024-05-19 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 a64ba108febbb5..b9903e6784f212 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 3eb0fb077b621c..559b38996e15ee 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 6a9910f2e96be5..e10ea7d67e809e 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 3fee86c44aa027..93fbf6523e61a4 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index c6ab529c57b838..3c4c2350ccd577 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-05-17 +date: 2024-05-19 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 c2b9f25fab6bbd..4e6d0e7a2563be 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-05-17 +date: 2024-05-19 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 63cc7252173ce4..851f2733e9bf81 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-05-17 +date: 2024-05-19 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 6f8b7d61134c7c..8de69bb06c6278 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-05-17 +date: 2024-05-19 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 fe35f776247fca..7d49b1b0da8b6d 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-05-17 +date: 2024-05-19 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 23e62de0022b37..0fe0c5d0b8cd09 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 7feb497f580a1d..64e57285301f44 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-05-17 +date: 2024-05-19 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 6b18520da551e6..1839187c9c18ea 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-05-17 +date: 2024-05-19 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 b21626de958e8b..69c8ffaac70815 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-05-17 +date: 2024-05-19 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 e140dabf9ab3ee..22363cf433b5e6 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-05-17 +date: 2024-05-19 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 59c564b3f80471..18bb6e269a6b88 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-05-17 +date: 2024-05-19 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 6116675bb8397a..e5b72387aa1cd8 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 c21fd05767f82a..8bd7ae850f7041 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-05-17 +date: 2024-05-19 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 57bc015bc7f739..c693d06311c0c6 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-05-17 +date: 2024-05-19 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 9f709be16a1c45..7de9cd7646bba2 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-05-17 +date: 2024-05-19 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 6be582e182c806..9e67243b7c78bb 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-05-17 +date: 2024-05-19 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 7e8e9eed0172eb..2e75aed52f43d1 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-05-17 +date: 2024-05-19 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 4cb3068d7056a5..9aecb3f82146ac 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-05-17 +date: 2024-05-19 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 f69f1c34659a90..e0a9d1c6d21e14 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-05-17 +date: 2024-05-19 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 31b7853e199cd6..2919ce24d213e7 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-05-17 +date: 2024-05-19 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 e7837b9a482cb1..68632dab626d7b 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-05-17 +date: 2024-05-19 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 936c8ac9463bc7..d99623e567cda7 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 d9f103a31e9613..8a1e9c1d7fbd0d 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-05-17 +date: 2024-05-19 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 3aa500f2d848e5..453ae215e59236 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 1fbe2ddba88708..1db255d2acc2de 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 3484b1ce59e17f..1d2805d3391acf 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index d3e015c7dfb5e4..c721be1c893ba8 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 2f894b503ca2ed..4fb4ddf26c3e3f 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index c5d5c207bb7e5a..ce4aff7653804a 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 7952724d9e5d0d..1e2946e6fa7806 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -117,10 +117,10 @@ }, { "parentPluginId": "discover", - "id": "def-public.DataDocumentsMsg.textBasedQueryColumns", + "id": "def-public.DataDocumentsMsg.esqlQueryColumns", "type": "Array", "tags": [], - "label": "textBasedQueryColumns", + "label": "esqlQueryColumns", "description": [], "signature": [ { @@ -138,10 +138,10 @@ }, { "parentPluginId": "discover", - "id": "def-public.DataDocumentsMsg.textBasedHeaderWarning", + "id": "def-public.DataDocumentsMsg.esqlHeaderWarning", "type": "string", "tags": [], - "label": "textBasedHeaderWarning", + "label": "esqlHeaderWarning", "description": [], "signature": [ "string | undefined" diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index a573d3acffed76..445800ed9160ca 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-05-17 +date: 2024-05-19 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 39a7df34b14a96..a5f190411dac0b 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 9bb1f8432c5874..ac03dcc9a8694f 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 6f35f8bcd50ff5..3cf6946623eff1 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index d19fec0143b78d..008a708c45ecfa 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 31852010bdf93a..07b4376b2e3f10 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-05-17 +date: 2024-05-19 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 8b5df61a783107..650ff42557ef0b 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-05-17 +date: 2024-05-19 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 f873b8b7ea452c..b3ee2e654206fd 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 12f63298f1e8a7..00f82ad3ac2af5 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 38f793e6e3cf37..e0d45792fd5b22 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-05-17 +date: 2024-05-19 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 4b585580773726..f1e7c554ddd523 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index c4e36759ebcb0d..45b552731f678a 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index aa4cac38c33678..f972f5103ecd3d 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-05-17 +date: 2024-05-19 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 d5c33b0355bfda..916c182d0123aa 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-05-17 +date: 2024-05-19 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 92fb61102ed828..7a2857395ff3a5 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-05-17 +date: 2024-05-19 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 64c30900fea0e5..c9922741355fdf 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-05-17 +date: 2024-05-19 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 97ce394d132975..fd7495c5043d8d 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-05-17 +date: 2024-05-19 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 f999ef8c264a3a..bd3c1ebb942893 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-05-17 +date: 2024-05-19 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 3e85f5c33d4f7a..17b8602af1bcc4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-05-17 +date: 2024-05-19 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 f44bd480a43a81..b504a433b5d3dc 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-05-17 +date: 2024-05-19 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 9fde2f242ea24c..e6c8ff76a623b9 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-05-17 +date: 2024-05-19 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 9b2d015678da77..0f7c45f96c19b3 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-05-17 +date: 2024-05-19 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 ee9bed795becef..158fc71f7d7828 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-05-17 +date: 2024-05-19 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 4ff15f37e6ce16..618fa37e48ada7 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-05-17 +date: 2024-05-19 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 ba12b8c7a6dbe8..5e8e4b277eccfb 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-05-17 +date: 2024-05-19 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 da8162d419510e..bee5052bcbd27f 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-05-17 +date: 2024-05-19 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 b365a68b9e3baa..12d6f0a61995c9 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-05-17 +date: 2024-05-19 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 24d787922f307e..14857a2b11507e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-05-17 +date: 2024-05-19 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 af9e00aea4fa7e..e93644dd2385e6 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-05-17 +date: 2024-05-19 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 e28bd87d9bf89b..fce73a3473b639 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-05-17 +date: 2024-05-19 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 ae49a90838b4f0..028001e047de89 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-05-17 +date: 2024-05-19 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 bacb2f50b06c8d..c9352d8cfcd6db 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-05-17 +date: 2024-05-19 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 ae74197ed4f549..d2a6c31d673dd2 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 06263703c93a77..9767c0c9487f82 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -24997,7 +24997,7 @@ "label": "[RegistryVarsEntryKeys.type]", "description": [], "signature": [ - "\"string\" | \"text\" | \"integer\" | \"select\" | \"textarea\" | \"bool\" | \"password\" | \"yaml\"" + "\"string\" | \"text\" | \"integer\" | \"password\" | \"select\" | \"textarea\" | \"bool\" | \"yaml\"" ], "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 751cbae29e8339..3657e7e95773a4 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 5c7dc5d236ad4c..f422b8a472ca0b 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-05-17 +date: 2024-05-19 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 ed6a32669c69a9..1b607010ac0336 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-05-17 +date: 2024-05-19 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 d926b11b5e58b3..904ce7f4c97b3c 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-05-17 +date: 2024-05-19 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 3b22ff101a23f7..14027fc7de1a2d 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-05-17 +date: 2024-05-19 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 b828ecd95544b2..28773c5dbaf7b6 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 b04192c743b002..48517194255ee5 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 61b4b7618a6c7d..5f4afd14895cd9 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index a5715b95db34c8..379fa0ab13e71a 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index c5cd5225f76372..c6cf4bd9268fe0 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-05-17 +date: 2024-05-19 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 ddd13e1a073bad..fe72278b9acd90 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-05-17 +date: 2024-05-19 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 30f7ce873c9ae0..0281922427ba02 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 03d955a3b37ded..742ddb736df31f 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 46642c9d949dcc..d4e7e86f8edf7e 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 6f0457631edbe1..933d8d46733d37 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 24fc602af53b6b..b7ce01896c5317 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 2670f7c9dd54a6..6c58ae60c91c49 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 0cc112d0e9d9d4..db73f6b482881f 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index f2d2d22d9d8e7b..fa4e73e9c6c9c7 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 7732611408b01b..bcb69928df8ccc 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 8d6ebe5c7762f8..1f10238ccb7dd3 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-05-17 +date: 2024-05-19 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 9fcffd5e7be8b7..c61648313adb71 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 382387f6ace2f4..02f60c3586d6b0 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -710,6 +710,42 @@ "plugin": "security", "path": "x-pack/plugins/security/server/analytics/analytics_service.ts" }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, + { + "plugin": "@kbn/cloud", + "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" + }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/analytics/types.ts" @@ -742,6 +778,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" + }, { "plugin": "elasticAssistant", "path": "x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 5a88ed83b0aba7..04134b564606af 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 81601781c23178..0cb9937c8d8bce 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 0d56eae4685f73..9cb066f5672c93 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 f786c68a5ff22e..e5cf81fbbdaa6a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-05-17 +date: 2024-05-19 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 9fc226fb8f7cc7..c9c9631affa010 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-05-17 +date: 2024-05-19 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 f32cc8f9bd387c..90532ab1ca6ef1 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index e2ea3e17b41fd2..a225be22f7c9a3 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index f8eb7ad7e13ac1..0dbf35ed1147da 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index a36fffb38f5ac5..afb4a4439150fb 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-05-17 +date: 2024-05-19 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 924b71a3c3b585..51b900db4ef99d 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-05-17 +date: 2024-05-19 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 34610cc4c7edcc..356064445b905b 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 50e6cc3ef7c2f1..54f44e5406b8af 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 5cd5ec708a0149..4f43c519eda356 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 7afaf74f92c67b..2d2a1001a95c24 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 7851e09d50cd77..f563389c11bcc1 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 83778f073195ad..d9ea1e00189f60 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-05-17 +date: 2024-05-19 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 87e310c222a718..8f897c3afbadd8 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-05-17 +date: 2024-05-19 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 e7d049233b283e..cd4eb2a58b520b 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-05-17 +date: 2024-05-19 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 2c0ebb2d261c8f..fb28e85ad8b051 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-05-17 +date: 2024-05-19 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 52da0031d1edd1..2f3e5d11118ce9 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-05-17 +date: 2024-05-19 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 f79e1e49602326..c9b0b5a1076b70 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-05-17 +date: 2024-05-19 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 d1ca6d47206abc..e6d5a297c28964 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-05-17 +date: 2024-05-19 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 832c857a3c70a8..76984819269785 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-05-17 +date: 2024-05-19 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 e8c74403140024..714af7150e3f60 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 23f39644234387..6a070259dc974f 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 864375cf36638f..ad3c75067aaa17 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 075b3a5ace7a16..0fff7097f0c0df 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-05-17 +date: 2024-05-19 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 53a6425bbae11d..b6c1c3942cde54 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-05-17 +date: 2024-05-19 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 ec1939de9dd083..6787e1bd0ed424 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 f52378ce308250..2358d2abf08547 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-05-17 +date: 2024-05-19 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 78a5af84bc23df..f3e5a319f8c129 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-05-17 +date: 2024-05-19 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 eb5ad8fe281c2a..4df030adc9c3e4 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-05-17 +date: 2024-05-19 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 39f5af2044f3da..80b0ef61daf1d6 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 5645e2aed47af4..f6e848d860c2f5 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 102af47f1424fa..ff279e9fb1f97a 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-05-17 +date: 2024-05-19 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 debaedfd822097..119bf9d34f04df 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 e20b8d790ce591..0bb00924e7b97a 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 b0ce2b675bdc79..dd7785d874219b 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 58eee0729b4854..26df108b520f45 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 287e16f66f98cd..14eee9d6933aaf 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-05-17 +date: 2024-05-19 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 1d41d6166b9c9f..7f001ac13c78e8 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 e2fb6d368d8a94..58e66e1ee76132 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 2d973e83c62728..e64a98628d68f5 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 a12850d472dfa8..15dbff7dac3b99 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 fae52641dd835b..555c29c1e3079f 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 145c7dc0bfadd1..8fb183f9247a18 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-05-17 +date: 2024-05-19 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 2801523677cc43..09c4933cbce855 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 bc570e7bf164e9..0c60ba7c4de415 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 9b3cbf61aa6ca8..d5dbf7531af3d4 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 7627419367883d..02848e04d43681 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 f08d68804083b4..66a93117b234db 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-05-17 +date: 2024-05-19 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 57ce3a2178cb16..fc185cd2ef82ac 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 d1cf83c623e6eb..10340b102ea2d4 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 7a41e807c96abc..7bdc73ee5b2b0b 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 a62930001d10f5..81caa7ad9084d0 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-05-17 +date: 2024-05-19 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 952dc0d6c883d2..fde7097996836d 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-05-17 +date: 2024-05-19 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 54891af50baa58..af10d184da57a1 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 6953f7d7d0f4f8..a5dca3b579cff1 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 b32e5193792aba..b43596991deb2f 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 890949aff2242d..88e6801d43d011 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 33d93db3c8073d..dd07dff5be9454 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 53209feb48ce2e..a13dfd30a88a40 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 165ad578c62fc7..cb1a44dacd179b 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 32b06c26014a23..dfd6d67c983b12 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-05-17 +date: 2024-05-19 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 f4d974f9de9c64..48b967cf16e02e 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-05-17 +date: 2024-05-19 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 be2bf300e3925c..23a86061b9a18d 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 aa172000d1049c..779a24ffed1fa4 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 aa5f0790d8f5f8..315356abdd171d 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 eb4c341edb4ff1..53c27b538c5a5c 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 f1090608dd2ae4..e18f012d98bcfe 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 baa21e365d46bb..a2fea3616d994b 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-05-17 +date: 2024-05-19 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 e24d0ef5030279..7415fa6127a7d6 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-05-17 +date: 2024-05-19 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 2154818b01d8a2..c8b7fd19a9e61f 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 dad4f89e0cccd7..ec6c2b73fa53e4 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 2cd5268a964efa..6de7f3a0dfe309 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 b29ce0544b5e30..a9a26fde82100d 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 86c9175ef6d956..fd1a8a1c8e28bb 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-05-17 +date: 2024-05-19 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 3613ecccc83854..aed7d4d463ac8d 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 c40f3fc9c7b2dc..6aeac120fe266d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 7dd24162f9d2ea..830ce217199b1d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index ebc3b396b431f7..1cd6aabe217df6 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-05-17 +date: 2024-05-19 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json index 1c0a249cb0f904..3e4e99923088b7 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json @@ -3114,7 +3114,7 @@ "label": "ElasticsearchConfigType", "description": [], "signature": [ - "{ readonly username?: string | undefined; readonly password?: string | undefined; readonly serviceAccountToken?: string | undefined; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; } & { verificationMode: \"none\" | \"full\" | \"certificate\"; keystore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; truststore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; alwaysPresentCertificate: boolean; }>; readonly healthCheck: Readonly<{} & { delay: moment.Duration; startupDelay: moment.Duration; }>; readonly hosts: string | string[]; readonly apiVersion: string; readonly customHeaders: Record; readonly sniffOnStart: boolean; readonly sniffInterval: false | moment.Duration; readonly sniffOnConnectionFault: boolean; readonly maxSockets: number; readonly maxIdleSockets: number; readonly idleSocketTimeout: moment.Duration; readonly compression: boolean; readonly requestHeadersWhitelist: string | string[]; readonly shardTimeout: moment.Duration; readonly requestTimeout: moment.Duration; readonly pingTimeout: moment.Duration; readonly logQueries: boolean; readonly ignoreVersionMismatch: boolean; readonly skipStartupConnectionCheck: boolean; readonly apisToRedactInLogs: Readonly<{ method?: string | undefined; } & { path: string; }>[]; }" + "{ readonly username?: string | undefined; readonly password?: string | undefined; readonly serviceAccountToken?: string | undefined; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; } & { verificationMode: \"none\" | \"full\" | \"certificate\"; keystore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; alwaysPresentCertificate: boolean; }>; readonly healthCheck: Readonly<{} & { delay: moment.Duration; startupDelay: moment.Duration; }>; readonly hosts: string | string[]; readonly apiVersion: string; readonly customHeaders: Record; readonly sniffOnStart: boolean; readonly sniffInterval: false | moment.Duration; readonly sniffOnConnectionFault: boolean; readonly maxSockets: number; readonly maxIdleSockets: number; readonly idleSocketTimeout: moment.Duration; readonly compression: boolean; readonly requestHeadersWhitelist: string | string[]; readonly shardTimeout: moment.Duration; readonly requestTimeout: moment.Duration; readonly pingTimeout: moment.Duration; readonly logQueries: boolean; readonly ignoreVersionMismatch: boolean; readonly skipStartupConnectionCheck: boolean; readonly apisToRedactInLogs: Readonly<{ method?: string | undefined; } & { path: string; }>[]; }" ], "path": "packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts", "deprecated": false, diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 1caf9502145c0c..b7a33cf64db966 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 e164374cc04cf3..f5463525d6e90d 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 eec2b260e2a6ef..74d9eb1c2cda0a 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 c3bda240aeb4ef..0df079cbff20f7 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 fe4fab1c4dabbd..d6ac073e20cb55 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 dd7325027af178..f5da47fef12540 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 197e043669fa3c..64dbfd9e8ed67d 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 ec0e3fddb3eaa8..b009e0f7adfd79 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-05-17 +date: 2024-05-19 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 d1abda6c5e8425..ef1620aa557df2 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-05-17 +date: 2024-05-19 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 466c3f1a1756ae..c270464b48f2d2 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 22b77ef36f28b8..3097b0096a6928 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 676cacaade35c5..f461cc8f1893c5 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 9ea657253981e3..2a8ac5e2dbcbed 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 c51d6a3cf4edf5..e58e318955a806 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 9865b20124ab3b..346653cacf75ba 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 3be1dda990d74c..2d0b54418f7f85 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 4844bcfeefb43c..022adef2b3dea3 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-05-17 +date: 2024-05-19 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 f8aaf5607e0a8f..adb59143d87b62 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 5d6cee9bc751aa..ffe7cfdf157c5e 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-05-17 +date: 2024-05-19 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 1d09c57a356cb9..f49d6e5ed1b4f2 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-05-17 +date: 2024-05-19 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 186c39943cc258..bfabbefa8a31e1 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 432112834ff9bc..00bd857377fee3 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 0e754761659728..9bc5167b6ba4af 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 48eb2177866fa0..2db128be3265a4 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 67868d64c110c7..33341437b0c703 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -7244,6 +7244,14 @@ "plugin": "assetManager", "path": "x-pack/plugins/observability_solution/asset_manager/server/routes/sample_assets.ts" }, + { + "plugin": "assetManager", + "path": "x-pack/plugins/observability_solution/asset_manager/server/routes/entities/create.ts" + }, + { + "plugin": "assetManager", + "path": "x-pack/plugins/observability_solution/asset_manager/server/routes/entities/reset.ts" + }, { "plugin": "profiling", "path": "x-pack/plugins/observability_solution/profiling/server/routes/setup/route.ts" @@ -9662,6 +9670,10 @@ "plugin": "assetManager", "path": "x-pack/plugins/observability_solution/asset_manager/server/routes/sample_assets.ts" }, + { + "plugin": "assetManager", + "path": "x-pack/plugins/observability_solution/asset_manager/server/routes/entities/delete.ts" + }, { "plugin": "synthetics", "path": "x-pack/plugins/observability_solution/synthetics/server/server.ts" @@ -13993,7 +14005,7 @@ }, { "plugin": "ecsDataQualityDashboard", - "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts" + "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results_indices_latest.ts" }, { "plugin": "ml", diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 4348a86af7122c..4e01377f6fd3e6 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-05-17 +date: 2024-05-19 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.devdocs.json b/api_docs/kbn_core_http_server_internal.devdocs.json index 6d7734efc14d94..96a3c4d50cdb24 100644 --- a/api_docs/kbn_core_http_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_server_internal.devdocs.json @@ -1449,7 +1449,7 @@ "label": "HttpConfigType", "description": [], "signature": [ - "{ readonly uuid?: string | undefined; readonly basePath?: string | undefined; readonly publicBaseUrl?: string | undefined; readonly name: string; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; redirectHttpFromPort?: number | undefined; } & { enabled: boolean; keystore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; truststore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; readonly host: string; readonly port: number; readonly compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; readonly cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; readonly versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; readonly autoListen: boolean; readonly shutdownTimeout: moment.Duration; readonly cdn: Readonly<{ url?: string | undefined; } & {}>; readonly oas: Readonly<{} & { enabled: boolean; }>; readonly securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; readonly customResponseHeaders: Record; readonly maxPayload: ", + "{ readonly uuid?: string | undefined; readonly basePath?: string | undefined; readonly publicBaseUrl?: string | undefined; readonly name: string; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; redirectHttpFromPort?: number | undefined; } & { enabled: boolean; keystore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; readonly host: string; readonly port: number; readonly compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; readonly cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; readonly versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; readonly autoListen: boolean; readonly shutdownTimeout: moment.Duration; readonly cdn: Readonly<{ url?: string | undefined; } & {}>; readonly oas: Readonly<{} & { enabled: boolean; }>; readonly securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; readonly customResponseHeaders: Record; readonly maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index a47a274e52fd3d..c5a90500848e21 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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.devdocs.json b/api_docs/kbn_core_http_server_mocks.devdocs.json index 780df3a7f05fc1..ce821d09edbc76 100644 --- a/api_docs/kbn_core_http_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_server_mocks.devdocs.json @@ -27,7 +27,7 @@ "label": "createConfigService", "description": [], "signature": [ - "({ server, externalUrl, csp, }?: Partial<{ server: Partial; truststore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", + "({ server, externalUrl, csp, }?: Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -64,7 +64,7 @@ "label": "{\n server,\n externalUrl,\n csp,\n}", "description": [], "signature": [ - "Partial<{ server: Partial; truststore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", + "Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index afd0796644c50e..eb5c4cae33cb90 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 a9ff67fdf2bcec..c4c43841255df4 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 63157c9ff0bc89..30625ac4028e82 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 9754f2c9aa01e7..534c5d4f156c33 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-05-17 +date: 2024-05-19 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 56aca483c6266a..0266f2d3f46d2f 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 f6e17011b4cdf4..69ccbed74d51ef 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 cd0ae16dbba285..9a9beed13099e6 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 6b9b52bfebf3b5..cd6e31d3a659e0 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 047cf3fc3c66ec..7c4a7b3700a045 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 3b26e82d44729d..8ac64bc776a121 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 b04bc6a4a798d0..b903ed99ee73dc 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 4f0893326e9261..14adb71d65f754 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-05-17 +date: 2024-05-19 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 1904590978be8d..d5f952f08a1922 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 c72c3bf34c9ca1..6f8f801e89be1c 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 1861471055c85e..7aff403a1f66e6 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 d6a816663a6fc2..e688d679fecaec 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-05-17 +date: 2024-05-19 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 f51c8fff6d0867..81582c9f2811a6 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 07e970fc6205df..74a7d2f085e95b 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 d9d0308e46ac90..c91a95c212fa2a 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 36cd196ca79d1a..0346151457efc4 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 1cb761eec2aad4..a10cba9705473b 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-05-17 +date: 2024-05-19 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 f998c39a8aa50e..259c87243016b6 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 97e4a3d7b44512..574176abac6475 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 fe689c4044816a..1b1a4cef9526bc 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 c96722cb19796e..92087f8d572662 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-05-17 +date: 2024-05-19 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 cf6b57c5a728d7..ad7c41557ff61b 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 bf53167682f82d..18612d7e9081f6 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 4e86f9e5dd2d5b..1e133c6c3a65a7 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 36da3408c86d05..36dfbd8a920aca 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 b312b6e0b56edb..63fd3dc396f74c 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 87b524dafa5f26..eaafb64ed4826e 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 f4767a032fe97c..81532791c506ea 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 01140f554987ca..ef0ca492aa62aa 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 5518ab165afb87..4aafa0c9fd707c 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 cb728794046beb..8adb963e6a2533 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index c5c5e1dc81d37c..e886f6a36b5f95 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 9b7f1ce9a3408f..20bd8ec832c206 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 4d7a5ad49c4f9d..fdf03233f7b580 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-05-17 +date: 2024-05-19 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 04dcec58add156..6960d72ce2bfb0 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 d3b7c99aa427a7..db561161ca40dd 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-05-17 +date: 2024-05-19 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 5a065851508cc3..0a257fe3eecd18 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 7148a5d0e7aa77..743ed3c4c59070 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 f3438dcafabec2..ef740419c727ed 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 c5018fd07c5a34..2aad41bd0f131a 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 0b5e4f399f08d2..6eb8f5c82c69cd 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index ee3bbc755c0ba3..8910eed34caadd 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 de15923802341e..e3a5a9cea9df3a 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-05-17 +date: 2024-05-19 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 4346109d0559be..eedb1366ec25d4 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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.devdocs.json b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json index 22752cea44fca2..a7c515398843f2 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json @@ -2601,6 +2601,17 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.HASH_TO_VERSION_MAP.endpointunifieduserartifactmanifest393c6e4f5f16288c24ef9057e4d76a4c", + "type": "string", + "tags": [], + "label": "'endpoint:unified-user-artifact-manifest|393c6e4f5f16288c24ef9057e4d76a4c'", + "description": [], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", "id": "def-common.HASH_TO_VERSION_MAP.endpointuserartifactmanifest7502b5c5bc923abe8aa5ccfd636e8c3d", 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 e365514b2bab8a..bf3b74f97df035 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 225 | 0 | 182 | 11 | +| 226 | 0 | 183 | 11 | ## Common 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 93c5f03ec53b7a..662a7bd8a7fe5b 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 e53010fbd4dcaa..82f98ecd08aa78 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 786c6f12754f03..f7a2036100e245 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 c32e1807716e4e..523a24a7809777 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 82c0f60dccfd2c..ffd56ab0776590 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-05-17 +date: 2024-05-19 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 85edc07df625d2..4180b7496a08f1 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 446f50d59ce735..a6ca6277492b10 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 c2b8752a9447ea..608a8ea2964643 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 56bb7892139945..b2e193fb082d30 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 69527cbfeb374a..f51dcfae05cdde 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-05-17 +date: 2024-05-19 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 75cefa3e46691b..c5be2fc03ba430 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 434d2739c0042e..6edeb8f0b02322 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 05b59b51d235c6..f97abdc8ecd2e1 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index df94f80adfa8dd..2c03a42e582aec 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 7e2098d979b22e..64ef5758ac9849 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 1b7ba91fc44417..fe03eaafd229bb 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 880bde21b83c8c..da26c8e79bf296 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 6b41a3fb8f7a55..3ca51a043d6218 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 7b70ea6f08071f..6084c9be4600e8 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index eb16fe4be2a999..9cc05841746ce6 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index bdc9fbd11e79de..0b711ff976e1bc 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-05-17 +date: 2024-05-19 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 df8dda07c1269d..5faf9d0f26a147 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 469c0e0159e268..ce06c6e7c2c0d4 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-05-17 +date: 2024-05-19 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 30b1260c0babe3..e23233d7c0c06c 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 5262b060c6dfa7..1233007246c869 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 6d2fea0e23589b..b9c0e485c98ce5 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-05-17 +date: 2024-05-19 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 6ce6b03042ffe9..e46aec94b84eec 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-05-17 +date: 2024-05-19 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.devdocs.json b/api_docs/kbn_core_test_helpers_kbn_server.devdocs.json index 6631202ad70129..6bf842de7c71ad 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.devdocs.json +++ b/api_docs/kbn_core_test_helpers_kbn_server.devdocs.json @@ -434,7 +434,8 @@ "text": "HttpMethod" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -833,7 +834,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -895,7 +897,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -957,7 +960,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -1019,7 +1023,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -1081,7 +1086,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, @@ -1143,7 +1149,8 @@ "text": "Root" }, ", path: string) => ", - "Test" + "SuperTestStatic", + ".Test" ], "path": "packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts", "deprecated": false, diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 1f09345bf8401b..3852e0d8eb1bf5 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index c521630f019be2..1afda534a2abb7 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 05065243419f96..03f06a7113ad2e 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-05-17 +date: 2024-05-19 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 ae3b7e33a1fffc..1394cb4af0c870 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 d6ad27b0af1315..59cfcc1532a1e2 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 0187203d4b3e78..8dadc631a54083 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 282060792ed60e..1577dfa24687e1 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 224063b850e527..276706acbd6a86 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 6b1cfbceb9a10a..ca9f0b64d6a733 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 0afaa876466631..fff9828c18f1c0 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-05-17 +date: 2024-05-19 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 87fa68e2cb3bf8..34b914dbe15e89 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-05-17 +date: 2024-05-19 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 794d8871b6f0a0..a4f61f48392bab 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 d84d6557acc5d0..ac93510b075309 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 8dfa3c5db3148d..436ce2741bed21 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-05-17 +date: 2024-05-19 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 7b9a58a3db57d3..1adea3e28da4d0 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 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 452f67b1e8759e..e0801071f00549 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index b9f3503096a8bb..cf34139a1b6d64 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 329f6a29302668..6e08c336ecfd3f 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 63d96666211dcd..e28aea02479236 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 6062054a802a05..21e20d8715333f 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index d2429e6d7f1552..8a9641cb9b9dec 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 981663e1a108d7..80e5d50586682f 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 2f2e2e4613b71d..47b15eda10b79a 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 7c345921fa97f4..5d1ade00b2c21c 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index cac1a8d6199fa3..b5449f0ee12204 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 4bdd403edf9497..d6b76c1271729a 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-05-17 +date: 2024-05-19 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 3beb47205a28f3..af0e377335486e 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index c324f27bff2f94..e58db3209f0dfe 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 0b0e8f68e8d65c..8281b4a48c2504 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index e7333d9b4fc7a3..1ee15ef6fe7848 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index ff0526fa8d49bb..fa708799dc6fc1 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 038fbc2c29c301..f3c4976db42660 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 3a65054db04e98..ac8fb4ca7e04ca 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 21943540887ec0..0fcaa1ce2008c1 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 211ebb9d30c6d6..41c00d8197a446 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-05-17 +date: 2024-05-19 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 6cd32e3a8216a4..f495bf834056a7 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-05-17 +date: 2024-05-19 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 0ebf82aed75c3b..9ed0fa5930db0b 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 6ecd0720cd545c..f13aaaf2fcac95 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 338146ed02a70b..be8334064cb0cf 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-05-17 +date: 2024-05-19 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 b7a7df7ad00366..2aee860a087616 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-05-17 +date: 2024-05-19 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 8b9c5b52fc0882..78bc4b74ede2f0 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-05-17 +date: 2024-05-19 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 caca52bcbef5cf..3a629de39dbd44 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 372ff59dc5a752..fa64b658cb4c54 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index f24762384ecea8..bae5e89dc470a5 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index df42da34ee3e1c..ceca28dc39c443 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-05-17 +date: 2024-05-19 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 de048835ad5034..d1e69be97bce95 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-05-17 +date: 2024-05-19 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 b41a1ec578d6fa..05ffa8847ba62b 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-05-17 +date: 2024-05-19 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 9b2c0e7578cb9b..88fa050c37ae05 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-05-17 +date: 2024-05-19 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 3ba178a55e2007..6be3743f66f245 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-05-17 +date: 2024-05-19 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 81fec4bb7d11c4..c246d6375a0279 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-05-17 +date: 2024-05-19 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 bc391889d45af5..4bc324c81c4b0d 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-05-17 +date: 2024-05-19 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 15cf096506cd4d..7aaf32bea3a9e6 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index dd1194aef57ea5..88dc4dd2811209 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -1011,7 +1011,7 @@ "label": "isLegacyTableEnabled", "description": [], "signature": [ - "({\n uiSettings,\n isTextBasedQueryMode,\n}: { uiSettings: ", + "({\n uiSettings,\n isEsqlMode,\n}: { uiSettings: ", { "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", @@ -1019,7 +1019,7 @@ "section": "def-common.IUiSettingsClient", "text": "IUiSettingsClient" }, - "; isTextBasedQueryMode: boolean; }) => boolean" + "; isEsqlMode: boolean; }) => boolean" ], "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", "deprecated": false, @@ -1030,7 +1030,7 @@ "id": "def-common.isLegacyTableEnabled.$1", "type": "Object", "tags": [], - "label": "{\n uiSettings,\n isTextBasedQueryMode,\n}", + "label": "{\n uiSettings,\n isEsqlMode,\n}", "description": [], "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", "deprecated": false, @@ -1058,10 +1058,10 @@ }, { "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isLegacyTableEnabled.$1.isTextBasedQueryMode", + "id": "def-common.isLegacyTableEnabled.$1.isEsqlMode", "type": "boolean", "tags": [], - "label": "isTextBasedQueryMode", + "label": "isEsqlMode", "description": [], "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", "deprecated": false, diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 46bafcf5db5414..2e69a45425d8f0 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 947b9db8fccbe2..db61b6fa68e9eb 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -546,7 +546,7 @@ "label": "securitySolution", "description": [], "signature": [ - "{ readonly artifactControl: string; readonly trustedApps: string; readonly eventFilters: string; readonly blocklist: string; readonly endpointArtifacts: string; readonly policyResponseTroubleshooting: { full_disk_access: string; macos_system_ext: string; linux_deadlock: string; }; readonly packageActionTroubleshooting: { es_connection: string; }; readonly threatIntelInt: string; readonly responseActions: string; readonly configureEndpointIntegrationPolicy: string; readonly exceptions: { value_lists: string; }; readonly privileges: string; readonly manageDetectionRules: string; readonly createEsqlRuleType: string; readonly ruleUiAdvancedParams: string; readonly entityAnalytics: { readonly riskScorePrerequisites: string; readonly hostRiskScore: string; readonly userRiskScore: string; readonly entityRiskScoring: string; readonly assetCriticality: string; }; readonly detectionEngineOverview: string; }" + "{ readonly artifactControl: string; readonly trustedApps: string; readonly eventFilters: string; readonly blocklist: string; readonly endpointArtifacts: string; readonly policyResponseTroubleshooting: { full_disk_access: string; macos_system_ext: string; linux_deadlock: string; }; readonly packageActionTroubleshooting: { es_connection: string; }; readonly threatIntelInt: string; readonly responseActions: string; readonly configureEndpointIntegrationPolicy: string; readonly exceptions: { value_lists: string; }; readonly privileges: string; readonly manageDetectionRules: string; readonly createDetectionRules: string; readonly createEsqlRuleType: string; readonly ruleUiAdvancedParams: string; readonly entityAnalytics: { readonly riskScorePrerequisites: string; readonly hostRiskScore: string; readonly userRiskScore: string; readonly entityRiskScoring: string; readonly assetCriticality: string; }; readonly detectionEngineOverview: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 5a3baf451f37bd..98a68eb861fe41 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-05-17 +date: 2024-05-19 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 c8f002965c8400..0b39b0d3679c2e 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 1f1140a615318e..e353f8fa59d7c0 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-05-17 +date: 2024-05-19 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 805b0e68d7a19c..a003f934c53429 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 83fd390d771474..654399701e8cf7 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index e8920b963d44e2..7f0c74f33fa8e5 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index 19c63390e9bb54..15d2789e991753 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -707,7 +707,7 @@ "\n`useAssistantOverlay` is a hook that registers context with the assistant overlay, and\nreturns an optional `showAssistantOverlay` function to display the assistant overlay.\nAs an alterative to using the `showAssistantOverlay` returned from this hook, you may\nuse the `NewChatByTitle` component and pass it the `promptContextId` returned by this hook.\n\nUSE THIS WHEN: You want to register context in one part of the tree, and then show\na _New chat_ button in another part of the tree without passing around the data, or when\nyou want to build a custom `New chat` button with features not not provided by the\n`NewChat` component." ], "signature": [ - "(category: string, conversationTitle: string | null, description: string, getPromptContext: () => Promise | Promise>, id: string | null, suggestedUserPrompt: string | null | undefined, tooltip: React.ReactNode, replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined) => UseAssistantOverlay" + "(category: string, conversationTitle: string | null, description: string, getPromptContext: () => Promise | Promise>, id: string | null, suggestedUserPrompt: string | null | undefined, tooltip: React.ReactNode, isAssistantEnabled: boolean, replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined) => UseAssistantOverlay" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/use_assistant_overlay/index.tsx", "deprecated": false, @@ -821,6 +821,21 @@ { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.useAssistantOverlay.$8", + "type": "boolean", + "tags": [], + "label": "isAssistantEnabled", + "description": [], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/use_assistant_overlay/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.useAssistantOverlay.$9", "type": "CompoundType", "tags": [], "label": "replacements", diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 0660e62550b6af..bfc340a9fcfda6 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 173 | 0 | 146 | 9 | +| 174 | 0 | 147 | 9 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index c9b782fcb5f776..a168d2b35810a0 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.devdocs.json b/api_docs/kbn_entities_schema.devdocs.json new file mode 100644 index 00000000000000..e393324139b95c --- /dev/null +++ b/api_docs/kbn_entities_schema.devdocs.json @@ -0,0 +1,525 @@ +{ + "id": "@kbn/entities-schema", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.BasicAggregations", + "type": "Enum", + "tags": [], + "label": "BasicAggregations", + "description": [], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.EntityType", + "type": "Enum", + "tags": [], + "label": "EntityType", + "description": [], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.EntityDefinition", + "type": "Type", + "tags": [], + "label": "EntityDefinition", + "description": [], + "signature": [ + "{ id: string; type: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.EntityType", + "text": "EntityType" + }, + "; name: string; indexPatterns: string[]; timestampField: string; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; identityTemplate: string; lookback: { toJSON: () => string; clone(): moment.Duration; humanize(argWithSuffix?: boolean | undefined, argThresholds?: moment.argThresholdOpts | undefined): string; humanize(argThresholds?: moment.argThresholdOpts | undefined): string; abs(): moment.Duration; as(units: moment.unitOfTime.Base): number; get(units: moment.unitOfTime.Base): number; milliseconds(): number; asMilliseconds(): number; seconds(): number; asSeconds(): number; minutes(): number; asMinutes(): number; hours(): number; asHours(): number; days(): number; asDays(): number; weeks(): number; asWeeks(): number; months(): number; asMonths(): number; years(): number; asYears(): number; add(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; subtract(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; locale(): string; locale(locale: moment.LocaleSpecifier): moment.Duration; localeData(): moment.Locale; toISOString(): string; isValid(): boolean; lang(locale: moment.LocaleSpecifier): moment.Moment; lang(): moment.Locale; toIsoString(): string; format: moment.Format; }; description?: string | undefined; filter?: string | undefined; metadata?: ({ source: string; destination?: string | undefined; limit?: number | undefined; } | { source: string; destination: string; limit: number; })[] | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; staticFields?: Record | undefined; settings?: { syncField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.KeyMetric", + "type": "Type", + "tags": [], + "label": "KeyMetric", + "description": [], + "signature": [ + "{ name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.Metric", + "type": "Type", + "tags": [], + "label": "Metric", + "description": [], + "signature": [ + "{ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.arrayOfStringsSchema", + "type": "Object", + "tags": [], + "label": "arrayOfStringsSchema", + "description": [], + "signature": [ + "Zod.ZodArray" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.basicAggregationsSchema", + "type": "Object", + "tags": [], + "label": "basicAggregationsSchema", + "description": [], + "signature": [ + "Zod.ZodNativeEnum" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.basicMetricWithFieldSchema", + "type": "Object", + "tags": [], + "label": "basicMetricWithFieldSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodNativeEnum; field: Zod.ZodString; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.docCountMetricSchema", + "type": "Object", + "tags": [], + "label": "docCountMetricSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.durationSchema", + "type": "Object", + "tags": [], + "label": "durationSchema", + "description": [], + "signature": [ + "Zod.ZodEffects string; clone(): moment.Duration; humanize(argWithSuffix?: boolean | undefined, argThresholds?: moment.argThresholdOpts | undefined): string; humanize(argThresholds?: moment.argThresholdOpts | undefined): string; abs(): moment.Duration; as(units: moment.unitOfTime.Base): number; get(units: moment.unitOfTime.Base): number; milliseconds(): number; asMilliseconds(): number; seconds(): number; asSeconds(): number; minutes(): number; asMinutes(): number; hours(): number; asHours(): number; days(): number; asDays(): number; weeks(): number; asWeeks(): number; months(): number; asMonths(): number; years(): number; asYears(): number; add(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; subtract(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; locale(): string; locale(locale: moment.LocaleSpecifier): moment.Duration; localeData(): moment.Locale; toISOString(): string; isValid(): boolean; lang(locale: moment.LocaleSpecifier): moment.Moment; lang(): moment.Locale; toIsoString(): string; format: moment.Format; }, string>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.entityDefinitionSchema", + "type": "Object", + "tags": [], + "label": "entityDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; name: Zod.ZodString; description: Zod.ZodOptional; type: Zod.ZodNativeEnum; filter: Zod.ZodOptional; indexPatterns: Zod.ZodArray; identityFields: Zod.ZodArray, Zod.ZodEffects]>, \"many\">; identityTemplate: Zod.ZodString; metadata: Zod.ZodOptional; limit: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { source: string; destination?: string | undefined; limit?: number | undefined; }, { source: string; destination?: string | undefined; limit?: number | undefined; }>, Zod.ZodEffects]>, \"many\">>; metrics: Zod.ZodOptional; field: Zod.ZodString; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>]>, \"many\">; equation: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }, { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }>, \"many\">>; staticFields: Zod.ZodOptional>; lookback: Zod.ZodEffects string; clone(): moment.Duration; humanize(argWithSuffix?: boolean | undefined, argThresholds?: moment.argThresholdOpts | undefined): string; humanize(argThresholds?: moment.argThresholdOpts | undefined): string; abs(): moment.Duration; as(units: moment.unitOfTime.Base): number; get(units: moment.unitOfTime.Base): number; milliseconds(): number; asMilliseconds(): number; seconds(): number; asSeconds(): number; minutes(): number; asMinutes(): number; hours(): number; asHours(): number; days(): number; asDays(): number; weeks(): number; asWeeks(): number; months(): number; asMonths(): number; years(): number; asYears(): number; add(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; subtract(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; locale(): string; locale(locale: moment.LocaleSpecifier): moment.Duration; localeData(): moment.Locale; toISOString(): string; isValid(): boolean; lang(locale: moment.LocaleSpecifier): moment.Moment; lang(): moment.Locale; toIsoString(): string; format: moment.Format; }, string>; timestampField: Zod.ZodString; settings: Zod.ZodOptional; syncDelay: Zod.ZodOptional; frequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { syncField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; }, { syncField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; type: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.EntityType", + "text": "EntityType" + }, + "; name: string; indexPatterns: string[]; timestampField: string; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; identityTemplate: string; lookback: { toJSON: () => string; clone(): moment.Duration; humanize(argWithSuffix?: boolean | undefined, argThresholds?: moment.argThresholdOpts | undefined): string; humanize(argThresholds?: moment.argThresholdOpts | undefined): string; abs(): moment.Duration; as(units: moment.unitOfTime.Base): number; get(units: moment.unitOfTime.Base): number; milliseconds(): number; asMilliseconds(): number; seconds(): number; asSeconds(): number; minutes(): number; asMinutes(): number; hours(): number; asHours(): number; days(): number; asDays(): number; weeks(): number; asWeeks(): number; months(): number; asMonths(): number; years(): number; asYears(): number; add(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; subtract(inp?: moment.DurationInputArg1, unit?: moment.unitOfTime.DurationConstructor | undefined): moment.Duration; locale(): string; locale(locale: moment.LocaleSpecifier): moment.Duration; localeData(): moment.Locale; toISOString(): string; isValid(): boolean; lang(locale: moment.LocaleSpecifier): moment.Moment; lang(): moment.Locale; toIsoString(): string; format: moment.Format; }; description?: string | undefined; filter?: string | undefined; metadata?: ({ source: string; destination?: string | undefined; limit?: number | undefined; } | { source: string; destination: string; limit: number; })[] | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; staticFields?: Record | undefined; settings?: { syncField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }, { id: string; type: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.EntityType", + "text": "EntityType" + }, + "; name: string; indexPatterns: string[]; timestampField: string; identityFields: (string | { field: string; optional: boolean; })[]; identityTemplate: string; lookback: string; description?: string | undefined; filter?: string | undefined; metadata?: (string | { source: string; destination?: string | undefined; limit?: number | undefined; })[] | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; staticFields?: Record | undefined; settings?: { syncField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.entitySchema", + "type": "Object", + "tags": [], + "label": "entitySchema", + "description": [], + "signature": [ + "Zod.ZodIntersection; identityFields: Zod.ZodArray; metric: Zod.ZodRecord; }, \"strip\", Zod.ZodTypeAny, { id: string; indexPatterns: string[]; metric: Record; identityFields: string[]; }, { id: string; indexPatterns: string[]; metric: Record; identityFields: string[]; }>; }, \"strip\", Zod.ZodTypeAny, { entity: { id: string; indexPatterns: string[]; metric: Record; identityFields: string[]; }; }, { entity: { id: string; indexPatterns: string[]; metric: Record; identityFields: string[]; }; }>, Zod.ZodRecord>>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.entityTypeSchema", + "type": "Object", + "tags": [], + "label": "entityTypeSchema", + "description": [], + "signature": [ + "Zod.ZodNativeEnum" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.filterSchema", + "type": "Object", + "tags": [], + "label": "filterSchema", + "description": [], + "signature": [ + "Zod.ZodOptional" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.identityFieldsSchema", + "type": "Object", + "tags": [], + "label": "identityFieldsSchema", + "description": [], + "signature": [ + "Zod.ZodUnion<[Zod.ZodObject<{ field: Zod.ZodString; optional: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { field: string; optional: boolean; }, { field: string; optional: boolean; }>, Zod.ZodEffects]>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.keyMetricSchema", + "type": "Object", + "tags": [], + "label": "keyMetricSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodString; metrics: Zod.ZodArray; field: Zod.ZodString; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>]>, \"many\">; equation: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }, { name: string; metrics: ({ name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.metadataSchema", + "type": "Object", + "tags": [], + "label": "metadataSchema", + "description": [], + "signature": [ + "Zod.ZodUnion<[Zod.ZodObject<{ source: Zod.ZodString; destination: Zod.ZodOptional; limit: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { source: string; destination?: string | undefined; limit?: number | undefined; }, { source: string; destination?: string | undefined; limit?: number | undefined; }>, Zod.ZodEffects]>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.metricSchema", + "type": "Object", + "tags": [], + "label": "metricSchema", + "description": [], + "signature": [ + "Zod.ZodDiscriminatedUnion<\"aggregation\", [Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodNativeEnum; field: Zod.ZodString; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }, { name: string; field: string; aggregation: ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.BasicAggregations", + "text": "BasicAggregations" + }, + "; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>]>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.percentileMetricSchema", + "type": "Object", + "tags": [], + "label": "percentileMetricSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx new file mode 100644 index 00000000000000..89a8dcfdc4f786 --- /dev/null +++ b/api_docs/kbn_entities_schema.mdx @@ -0,0 +1,36 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnEntitiesSchemaPluginApi +slug: /kibana-dev-docs/api/kbn-entities-schema +title: "@kbn/entities-schema" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/entities-schema plugin +date: 2024-05-19 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] +--- +import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; + + + +Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 19 | 0 | 19 | 0 | + +## Common + +### Objects + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 3a8a97fb48c7e4..81e985c9dc0dc5 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-05-17 +date: 2024-05-19 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 1117b475060d2d..c91cb25d6728f8 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-05-17 +date: 2024-05-19 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 b8dd72a7dcd941..97d8f64748b699 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-05-17 +date: 2024-05-19 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 31f59062ca8e32..d20db8db271245 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-05-17 +date: 2024-05-19 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 c9903f08be08d8..f2c847acb689a8 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-05-17 +date: 2024-05-19 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 f0a2568b31c247..950b5bab493119 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 3a73aeeff3b428..8aa7a4910914f4 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index 095c88e18a505a..db7a44d058d308 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -75,7 +75,7 @@ "label": "appendWhereClauseToESQLQuery", "description": [], "signature": [ - "(baseESQLQuery: string, field: string, value: unknown, operation: \"+\" | \"-\" | \"_exists_\", fieldType: string | undefined) => string" + "(baseESQLQuery: string, field: string, value: unknown, operation: \"+\" | \"-\" | \"is_not_null\" | \"is_null\", fieldType: string | undefined) => string" ], "path": "packages/kbn-esql-utils/src/utils/append_to_query.ts", "deprecated": false, @@ -134,7 +134,7 @@ "label": "operation", "description": [], "signature": [ - "\"+\" | \"-\" | \"_exists_\"" + "\"+\" | \"-\" | \"is_not_null\" | \"is_null\"" ], "path": "packages/kbn-esql-utils/src/utils/append_to_query.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 0e707e004376d1..57a87d9a80f8fa 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 6caf29b4a5d35a..94adb9d385df30 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index c29fbb021af9c3..1cfabdaf820d70 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index ecf09252a4b365..8d6465aef2dea8 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 99a00415257445..06e70f74542574 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-05-17 +date: 2024-05-19 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 9550f3795d76a2..16cb909cb6a4b0 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 6d974f2ca9e358..a2eca61da21ec4 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index e10d72e9945509..d4b7ea6f5119bd 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 3b04a25258387b..18933ef036ed15 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index af92263e8cfedc..15ebd881c1c7ae 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 61075c6eb6579e..25c315b38ff937 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 1ff636eeb0a21d..490d5c14c5564b 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-05-17 +date: 2024-05-19 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 50d686491379d5..c80d688d7da93f 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-05-17 +date: 2024-05-19 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 653ee460a8fe52..3e5c4463fe0989 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 6c33c24016be98..573b442be9b5ef 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-05-17 +date: 2024-05-19 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 d19dc9e916402f..d124395053442b 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-05-17 +date: 2024-05-19 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 1b4cff78a60c8c..7f9ba16f62cddb 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 db3623534368cb..cde3456b1d4da3 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-05-17 +date: 2024-05-19 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 a37230987a541b..aa5dcc6d03ec5a 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-05-17 +date: 2024-05-19 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 8b34f16ff4a376..772cc001fff35f 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-05-17 +date: 2024-05-19 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 b814e45a8d7aee..9148fd24922ffe 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-05-17 +date: 2024-05-19 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 4425c183688ab3..72410e20a9ffbd 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-05-17 +date: 2024-05-19 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 0da7050bb2168e..11a682fbff4d29 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 01225b0abd28c2..e6face4463af68 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 4e758ffe534eec..c9837c6b33bd95 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index af996b7c3b0a7c..29785b51fc6ac1 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-05-17 +date: 2024-05-19 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 231b37fa243d3d..abdcb4925d5393 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-05-17 +date: 2024-05-19 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 251f6f1c286cca..f624d864c9b934 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index edfc6c4d6a4f8f..499df74c38df6e 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 19f988496b0730..7a362a201293ce 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-05-17 +date: 2024-05-19 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 b7962b651cba61..f29b0f26530986 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-05-17 +date: 2024-05-19 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 4330063fe00c86..b4e6452728084d 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-05-17 +date: 2024-05-19 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 61ec8ae5ce8b11..2d8b26d64bb944 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-05-17 +date: 2024-05-19 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 25b833684cbf11..750dd2cbb74853 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 2d2f057707b7cc..5902f87ce2003a 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 6bb81899844397..94edffd4284db2 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index edc37ca458a2ef..ee97a4715d551a 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-05-17 +date: 2024-05-19 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 58e1d323c31099..3e8d026159bb88 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 240057a534fbb4..a1333ee4b06f8c 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 9f84eff04585ed..2d907e51a3c14e 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-05-17 +date: 2024-05-19 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 e1a85b4a34cf66..55e7a5478fafef 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 78ddec1b326fb5..a839f48d336715 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index a66e7c7f87ecec..7549bda1c31bcd 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index b16d9b73e7713b..db56d069cf0b36 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 0a057879d7f2dc..d7d77fc04e04a3 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index ba8762a3fc108c..48ca77d59ea9da 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index f094c882827df9..8b73f898359c86 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index c02ad2f6362ee6..6ccecf014d2cea 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 8e2abaa157e8ae..8c3e958d4746a9 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 36f4ad1664324a..cf1fbeddee7f3b 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 573e59b8eebecb..f19fd86456f4f1 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 97bf635ef7cb94..4654d04980bae4 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-05-17 +date: 2024-05-19 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 c22f7ba48d96e3..943f7b16528678 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-05-17 +date: 2024-05-19 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 d84fd70e0101fc..9209107e09dabb 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 b0777f30c7b363..bd63c5f1c86fb7 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 3470163a6c67f3..5e2f3b0e367deb 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 6e43c3815a0319..0fde6af38016b5 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index a935ca38b9907b..6bd8d6b90b4ee1 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 706082b11619bb..e9cf6b22c55ade 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 61c4bd53b7bf8a..d46d08a302f356 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 9ad707baf9de71..f9499123f359a8 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-05-17 +date: 2024-05-19 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 0dc7fd4d8ce462..538b6c1a3ace44 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-05-17 +date: 2024-05-19 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 fdb87e6ead0c85..d70ee203990b15 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 34e962709318d5..90aeb8b9379bfb 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 1bd4b9f1987be0..00012f83863962 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 5f7cd4e2ff0a97..4eb7074bc1ca97 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-05-17 +date: 2024-05-19 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 31f4017eac8232..c65bd14a02117c 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-05-17 +date: 2024-05-19 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 62b780240d0e96..5ae0419fe74f4c 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-05-17 +date: 2024-05-19 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 98320a592e34d5..ad03c57f7f0797 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-05-17 +date: 2024-05-19 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 002d87f9f8b7d5..ad650c425b7ffe 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-05-17 +date: 2024-05-19 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 b31da35bf65b24..3ac8c87df606c4 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 4394bfcba4ed05..95d04de9d7da28 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 40a3bd21d910e2..0d29a61b19afc6 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 d41647a8f96deb..2ae83b99b6ebab 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 d07b6ab4368562..42ee6a62713964 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 71dad33e042a00..55eb1dd04c5d28 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 225c805a332551..a7763e6158bde6 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index bc8fe63031abb3..07f6672ccaca54 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index c4bb62c548c4ad..ed4b90d9a1c998 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 4a16938f933010..e3ca6d746c6e38 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index e02d381b3e0511..c936b271af7bb6 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 15a38628e72854..6899d20c4c4b3c 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-05-17 +date: 2024-05-19 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 3158f504dfa0b2..271b0ae5dee031 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-05-17 +date: 2024-05-19 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 e1cf9fe43736ec..f4da0bb4fdc11b 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index ccf41b9aeca248..4bf2e8ddbd77ea 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 34124658ca6325..94bcb4483986c6 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 971a09d2961bbe..374f92f4d3c08b 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index fc637a17aaf888..efd97921ceb17c 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 5aaecbeb28bbe0..25e9dad4d5edae 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-05-17 +date: 2024-05-19 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 4eaba139189859..9d278eafc4faea 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-05-17 +date: 2024-05-19 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 75097b46b245c0..492afe7ce1f899 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 13c370601d4753..f8656e5758809b 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index a44e491c8d3a3b..5c4339c97fa9d7 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index b8d5a7807394ba..f1d81f0eb2f497 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 65e7c98c7b0399..4c3110c55aefe9 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-05-17 +date: 2024-05-19 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 3c4eeaf583bd7f..6a1a3f49cc1739 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 840eec03bb9cb2..66672c32771f42 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index f7a3ee02052bca..e8419fb9fa45ca 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 4c5d579d8e0ead..23fe67b022a2e9 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 75eaac5c950b57..a079a9d4c3772c 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-05-17 +date: 2024-05-19 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 076f18c6b1c043..ff549ce94f6068 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 08f8a5afa177b1..7796291c4e3065 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 2246b0c439f932..e067de3944c396 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 7979c997747f9c..52c3c8737884b1 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index f38620267378c3..b5143e80ddab57 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 0b091edb14b97d..13afb8554a9cfb 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 07257e9fbc75dd..73a983e87f7000 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index bb8079ef191ec4..9137ad2d77f810 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index dcfacf132e61ec..14ccc5427516c4 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-05-17 +date: 2024-05-19 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 68f966745a9eca..7ad4187cbbc3e4 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-05-17 +date: 2024-05-19 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 0417a37f7539e3..4c1c605a004971 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-05-17 +date: 2024-05-19 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 1774ed88835c7c..622d627b293e59 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-05-17 +date: 2024-05-19 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 6b6e08cd517ac8..514013aa7b05e0 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 9a6ee5f3e5f3de..a57514f162d67b 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index ee4ec1dde186fc..bfbfaf9bcf2bbc 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 41d11899a42af1..dd777315507303 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index d1d6055b499da7..87f89cea7e806e 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 645b55ac68d012..46ba2982cd3cad 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 58623b4f50029a..d17e856edbef6c 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 382a175012340d..ca6cc0a1d91ac8 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 6febd41dd4a3f7..ce41e78ee4a315 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 4aea2a32ee9022..fdd58f7f99a43d 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index f41f3aefbdc71a..d1c17fb0572cad 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 0d6cc96a8303c4..f66b89e3fe7649 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 3a25e6066e2e5a..580a6c54625926 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index b6bc3d26a2e6d4..363f34c92b331d 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 7fea2af26040ac..cb0b8b1a161912 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 91d869e6d8495e..c4588fa43d5ed5 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-05-17 +date: 2024-05-19 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 bf43222cd3057c..217abd355bf8ad 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 a06c844bb8e3eb..862318d763b71a 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 61f63e012b7a49..dda7f0c511b4d1 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 5ed11e321eb61a..3b2ed43ee61003 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 984025b7d06e7a..fff3769e37c317 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index a9b26f8c602ec9..3d84de88dfe028 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index d58b65eb565780..271ad96f854cc9 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index bcb46438310cc0..b32fd70eb12c3c 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 94deed4ec4598f..014e15dce91613 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 89d6e4fc0fa133..bafc12b43eae72 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 70ba64c9ab624d..834c899a96b377 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index c8834e98b44f3d..a2d1d8e22519f7 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index f3442ad45f12b3..ad07a0476c1489 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index cb475dad3ad2f2..959f8bfded6b9d 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 7b7a9bfa7808cb..1e0e9295b4b0ba 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-05-17 +date: 2024-05-19 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 96e2ebca3d22e6..00508df83dca94 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-05-17 +date: 2024-05-19 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 30e170f3cf2cfd..7f7a6e744592f0 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-05-17 +date: 2024-05-19 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 5f658ed3e12dfb..d812ad4af690c0 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-05-17 +date: 2024-05-19 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 60aa38c8a7a96c..51ffdc21ca6952 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-05-17 +date: 2024-05-19 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 150892b1a83b9d..de6c3dff7cc41d 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 023bbf4aeee196..6f4a5c8c830353 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-05-17 +date: 2024-05-19 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 8a1874fe8b8149..a0e0361721cc9b 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-17 +date: 2024-05-19 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 8e604d51e2470e..56a3d30a2399a1 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 a62bdb48a0f09c..7aa2cf43471d5c 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-05-17 +date: 2024-05-19 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 faa08f94d3118f..9120d6ef550769 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-05-17 +date: 2024-05-19 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 12815e0c764dd3..62f2a5cf420ae7 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-05-17 +date: 2024-05-19 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 e38be73a94349c..82027bb97c13b5 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 a0457c67c48031..962d6eadf7e41c 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-05-17 +date: 2024-05-19 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 e6a41b28a8dd5f..723b2110c87c52 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-05-17 +date: 2024-05-19 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 d5fa741e96602b..cadfae83ce44b3 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-05-17 +date: 2024-05-19 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 94923dc377f943..a40fdc36173e0a 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 4f131138cc71a5..9d762da719987e 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-05-17 +date: 2024-05-19 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 5f11ec521639ab..1176b992af69c8 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-05-17 +date: 2024-05-19 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 4e4ebe2b8e153c..aaa115c857fc23 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-05-17 +date: 2024-05-19 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 86c4d69b3efd58..140b56a1b81244 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-05-17 +date: 2024-05-19 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 2e31210d23d62a..0c20eb2ee1ebee 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 380c44789901c2..65f940fab32339 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 58bf802d7d92f8..f219071cc45ec6 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 6e7e1d3a1f40cc..5387e0c4a6d846 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 42496b3489c2dd..d0e70367339b5a 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index d3298b2ac803bc..63d759740785f1 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 44f0dba92b4806..f0dc1d17095255 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-05-17 +date: 2024-05-19 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 fa60e6707fbf93..63259987693e21 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-05-17 +date: 2024-05-19 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 073d802aa91dec..5e54c4f8a14018 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index f50075ed2d474b..436a38b79aed29 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index c2ebdf62a81d85..fd9b47e1500e25 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-05-17 +date: 2024-05-19 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 7835d3cdf4d22c..dda321dc7f6c3e 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-05-17 +date: 2024-05-19 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 956722380965af..68c2348aa878e2 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 5d44372103f973..d56176b44f7e20 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 0f6e6712887e8f..5a2722733413dd 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 3c852594630f14..b1fb015ce237cf 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-05-17 +date: 2024-05-19 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 bb3ee8f113b7d5..b1e14e055d034c 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-05-17 +date: 2024-05-19 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 b5bd9309f8b186..c00a27ce93691d 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 be42cc4157ca22..71197e7762abef 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 0046fb6826ea2c..d83099d47cc8bd 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-05-17 +date: 2024-05-19 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 1b5cb7ae746136..f1fb9a6e27226f 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-05-17 +date: 2024-05-19 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 155ddc0c11d8fe..cb6313658a9f0a 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-05-17 +date: 2024-05-19 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 537e30cbb2d655..aa5c516409f13b 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-05-17 +date: 2024-05-19 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 b86f71d81beed2..0bac0f6f303302 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-05-17 +date: 2024-05-19 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 09bb430a3aa85a..cd259aa06c8883 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 5ff6f52d7fe543..cfa85dfee4d187 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-05-17 +date: 2024-05-19 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 76e22a9401f24c..bede0c2d5371b7 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 e5bc883bddde8a..3f249764ad1ea5 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-05-17 +date: 2024-05-19 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 f5604aecb0dd68..6907df2fbdcc1a 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 a94994d2f2b61e..be8adb81dc2b00 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-05-17 +date: 2024-05-19 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 b537dd0dfc291a..9bad59ffae1443 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 c49d6066a79d5c..34c7b0f4d542de 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-05-17 +date: 2024-05-19 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 de9299337b544d..0c0d8a3e670752 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 a91d801ec4c5bb..565fab0d664041 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-05-17 +date: 2024-05-19 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 23e909c4079997..895df6d8c999ec 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-05-17 +date: 2024-05-19 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 b83265c35d7b89..211c0053aa4054 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 ac29444142cdf4..d3a76f0d2d7dc3 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 e710289fd40b5b..9a3af6a5713339 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-05-17 +date: 2024-05-19 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 1069afb70486ba..9dcf82779521bc 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-05-17 +date: 2024-05-19 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 bec8d90d7c0a81..b5504cd02a4e89 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 2fee7168aabaa0..88e508d1ff6409 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-05-17 +date: 2024-05-19 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 78417172d1319a..b5e411c077b68a 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-05-17 +date: 2024-05-19 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 293f834f05d330..7554094acefc87 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-05-17 +date: 2024-05-19 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 b5b069a29e0abe..533bf736ab2833 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-05-17 +date: 2024-05-19 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 8ac82dd68f8cf9..9d5edbaf81912d 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 3633185c4a0917..8385fddc5e8b6b 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index e32ff9e949652e..cda82d238defd6 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-05-17 +date: 2024-05-19 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 9b1dcf79f7ed0e..49e62b7f988278 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index be1ef596adfa5a..c3c88df414d044 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 1f69c6c2dbd241..d7243a2f04157d 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index f71f3086091d01..803e5cdefc1152 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index df1e5cb309937f..1d9b43d1bb966f 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.devdocs.json b/api_docs/kbn_std.devdocs.json index b92d1a21b2c294..7dda5e8072d18f 100644 --- a/api_docs/kbn_std.devdocs.json +++ b/api_docs/kbn_std.devdocs.json @@ -944,7 +944,7 @@ "\nDetermine if url is outside of this Kibana install." ], "signature": [ - "(url: string, basePath: string) => boolean | undefined" + "(url: string, basePath: string) => boolean" ], "path": "packages/kbn-std/src/is_internal_url.ts", "deprecated": false, diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index dbc6b71f15cf16..a66dba556de3fe 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-05-17 +date: 2024-05-19 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 e5dbedf0ae93f9..afd86816f9ea1d 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-05-17 +date: 2024-05-19 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 90df907eeb7844..485f83f6d1e0a6 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-05-17 +date: 2024-05-19 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 db5fa66f10db76..f634766c24ec4b 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-05-17 +date: 2024-05-19 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 1fa524b0efb8dd..475c8993b1ff50 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 4289e00f1e5e76..045d543259227c 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 9bdb32296af219..caa554187564fe 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-05-17 +date: 2024-05-19 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 97d1302cdea1c9..25755fb39f63ea 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-05-17 +date: 2024-05-19 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 be45708d02c2a1..a352e31a061a5f 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 78612333dcd1ba..681e22d5ee81dc 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 0c988ebd69f351..739a58b8a170c8 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index c228926342b714..e2db2a0b5ef135 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index ecc4518ba8e813..58463b1cfa14a2 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index a96fa3df263b91..9465ba2bea1a32 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-05-17 +date: 2024-05-19 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 c5c4e4a4a132b6..63992dfca9589f 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-05-17 +date: 2024-05-19 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 0acf68f5d9d207..7bf310cf38e66e 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-05-17 +date: 2024-05-19 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 ce32374b41013f..644f36e6e730cd 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-05-17 +date: 2024-05-19 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 9031fda6e4043b..3ed8016e796227 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 2ee487cd0d663e..938a71fa1847b7 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 0c51079c292289..fc5e9db79b308b 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 3d052cb5f9202c..7e2c409a12cd02 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 18eb27ecd9cc4d..0f105ccd41f01b 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 627774c485e469..2e6a3c6d829294 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 2c67f344d71aa8..b043481ac5d69e 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-05-17 +date: 2024-05-19 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 80abfba5a79ea9..e8906ae9e38808 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-05-17 +date: 2024-05-19 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 58eb8d7c15930c..c2d54c203c8168 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-05-17 +date: 2024-05-19 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 a61141d65731bd..39b6bc6bf5561e 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 914287fb5f99cc..fad191c0d19b9d 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index dfe5fc14f95f5e..1608353e8d4671 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index a909a06d1bae8c..5ca8db73845347 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 88715e0a5a96b4..9b6b6cdb44a4de 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index ea0a35c33ad681..bf0c0bd4b0f806 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 3556053ea6943a..80d1579f67eb13 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-05-17 +date: 2024-05-19 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 5fe49dd46adf0d..23b23a2318ca25 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-05-17 +date: 2024-05-19 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 b0f4c61c8a5a86..8b8e283efc01de 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-05-17 +date: 2024-05-19 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 7a9e99ddbfaa88..e39358e10781b8 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-05-17 +date: 2024-05-19 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 f5c5fadbdedac1..7e940a43473c80 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-05-17 +date: 2024-05-19 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 8031bc32939b9a..04ac67bfd35f40 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-05-17 +date: 2024-05-19 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 5b1dde74c7d562..9bf04639be94f6 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 18a581ce893ace..95865eff03c8a7 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index a9a7e2a5cd7fa1..4e27fa0002d721 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index c614d4f6dff63d..bb8e8e6e99a8db 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 2115a9ac683c56..a08a13d208720d 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index b3676d8731bd73..01db4df36d530b 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 7c20eddf443c21..ddb1cf01667f20 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-05-17 +date: 2024-05-19 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 9cb264a9150ae3..ed68f6d11228fc 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-05-17 +date: 2024-05-19 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 59378c35aa8e4e..c90b41abfe8f2e 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-05-17 +date: 2024-05-19 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 9d9ecca4dcbfd0..79fadcd61165f5 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 198a88d6d3b22c..1b04b40c765d0b 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index cc3a12fe8a5902..35ee1ae7563d34 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 52f90e201be8f5..1e4904ddb746e0 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 4b58490652ace7..e1d66251e08b7f 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-05-17 +date: 2024-05-19 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 feda619f2dde3f..8d2f23fdae9611 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-05-17 +date: 2024-05-19 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 1e7b8ef379f8fc..48fb34b31c7a61 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-05-17 +date: 2024-05-19 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 b85d674a842323..76642c8fab63f2 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 2c274f8a5b07a4..2f66f32e470957 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 3f6937d1fe7faf..fc7e924f3d1bd7 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index f561cc2b30f386..ae00178132f6f9 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index f914b84526451c..9cd8cc35a2c001 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index af86bb282745b1..75bb3fc0867abb 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 01fb2eb61183ae..bd0fba08d168ce 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 0fc72712b45b04..14479241bd16cb 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index c5e4c62abe8e8d..ab36efba51f07f 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-05-17 +date: 2024-05-19 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 351f5ce7c2a1dd..e44212f483bade 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -3488,6 +3488,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.INVENTORY_LOCATOR_ID", + "type": "string", + "tags": [], + "label": "INVENTORY_LOCATOR_ID", + "description": [], + "signature": [ + "\"INVENTORY_LOCATOR\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/public/locators/infra/inventory_locator.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.LazyObservabilityPageTemplateProps", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 26f7ba67398be3..4d307bb7c97205 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-05-17 +date: 2024-05-19 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 | |-------------------|-----------|------------------------|-----------------| -| 354 | 1 | 349 | 22 | +| 355 | 1 | 350 | 22 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index d65e6fd1cb6b71..95265f84768819 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index de7c5bd7b1e8f7..0d7bf625f420b4 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 0a85ec1f71028d..c7f48727018478 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 796 | 684 | 43 | +| 797 | 685 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48193 | 241 | 36773 | 1860 | +| 48217 | 241 | 36797 | 1860 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 301 | 0 | 295 | 32 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 303 | 0 | 297 | 32 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 67 | 0 | 4 | 1 | @@ -148,7 +148,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 21 | 0 | 21 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 16 | 0 | 16 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 354 | 1 | 349 | 22 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 355 | 1 | 350 | 22 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 | @@ -395,7 +395,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 112 | 1 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 356 | 1 | 5 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 11 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 225 | 0 | 182 | 11 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 226 | 0 | 183 | 11 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | @@ -482,8 +482,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 33 | 0 | 24 | 1 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 173 | 0 | 146 | 9 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 174 | 0 | 147 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 232 | 0 | 217 | 2 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 37 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 17ae841e4cf7da..a5a1ef3c39a6a7 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index e6d914b993e9a5..89bd78d47ffdf1 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.devdocs.json b/api_docs/profiling.devdocs.json index c68d7dcd3af813..01192dc0b13f43 100644 --- a/api_docs/profiling.devdocs.json +++ b/api_docs/profiling.devdocs.json @@ -53,7 +53,7 @@ "label": "ProfilingConfig", "description": [], "signature": [ - "{ readonly elasticsearch?: Readonly<{} & { username: string; hosts: string; password: string; }> | undefined; readonly symbolizer?: Readonly<{ telemetry?: boolean | undefined; host?: string | undefined; tls_enabled?: boolean | undefined; tls_supported_protocols?: string[] | undefined; tls_certificate_path?: string | undefined; tls_key_path?: string | undefined; } & {}> | undefined; readonly collector?: Readonly<{ telemetry?: boolean | undefined; host?: string | undefined; tls_enabled?: boolean | undefined; tls_supported_protocols?: string[] | undefined; tls_certificate_path?: string | undefined; tls_key_path?: string | undefined; } & {}> | undefined; readonly enabled: boolean; }" + "{ readonly elasticsearch?: Readonly<{} & { username: string; password: string; hosts: string; }> | undefined; readonly symbolizer?: Readonly<{ telemetry?: boolean | undefined; host?: string | undefined; tls_enabled?: boolean | undefined; tls_supported_protocols?: string[] | undefined; tls_certificate_path?: string | undefined; tls_key_path?: string | undefined; } & {}> | undefined; readonly collector?: Readonly<{ telemetry?: boolean | undefined; host?: string | undefined; tls_enabled?: boolean | undefined; tls_supported_protocols?: string[] | undefined; tls_certificate_path?: string | undefined; tls_key_path?: string | undefined; } & {}> | undefined; readonly enabled: boolean; }" ], "path": "x-pack/plugins/observability_solution/profiling/server/index.ts", "deprecated": false, diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index d9b6d1e49dc00a..8281864a4030c6 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.devdocs.json b/api_docs/profiling_data_access.devdocs.json index 12988cabdf6403..5e9cd79d512997 100644 --- a/api_docs/profiling_data_access.devdocs.json +++ b/api_docs/profiling_data_access.devdocs.json @@ -22,7 +22,7 @@ "label": "ProfilingConfig", "description": [], "signature": [ - "{ readonly elasticsearch?: Readonly<{} & { username: string; hosts: string; password: string; }> | undefined; }" + "{ readonly elasticsearch?: Readonly<{} & { username: string; password: string; hosts: string; }> | undefined; }" ], "path": "x-pack/plugins/observability_solution/profiling_data_access/server/index.ts", "deprecated": false, diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 450b95b62aee99..50807a531920ec 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 627f617141db34..3c41e009bfa7d2 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-05-17 +date: 2024-05-19 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 cfbfe38c627e7b..c647b84cdc691f 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index bab44d5f808c09..8920501487f5cd 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-05-17 +date: 2024-05-19 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 3aae98fbefbb01..93bb9522695dd5 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-05-17 +date: 2024-05-19 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 1be7f3ab838722..096d04a2622932 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-05-17 +date: 2024-05-19 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 789683d0e9f0b5..1a625fec67d1e1 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-05-17 +date: 2024-05-19 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 8767f1d956706c..79756d82cc5107 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-05-17 +date: 2024-05-19 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 24881313fef488..c94687940c5f5c 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-05-17 +date: 2024-05-19 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 3bdf5ca9305c63..d9f548b20d3845 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-05-17 +date: 2024-05-19 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 ac922dcccf9a6f..8190123d52b878 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-05-17 +date: 2024-05-19 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 41bb46f2582681..afa85cb2d4a299 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-05-17 +date: 2024-05-19 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 b0b21f7ef16989..1d19bfc48fcbf4 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-05-17 +date: 2024-05-19 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 675cee452135cd..44b7aa790537a3 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 4f26ccc5449553..f2cf608a087004 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 8d42178f20e003..9a8d3a8a2a3be9 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 5066649de862da..58ad8429098ec3 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index d35d950f51d48b..c0a611852f790d 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index a5ac269fd642ec..4f10cc05299177 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1964,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3054,7 +3054,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3230,7 +3230,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3296,7 +3296,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 75e3bfcc21f7ed..bdcd3720b49b2c 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-05-17 +date: 2024-05-19 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 8d1e4b618f3cf0..d332e7135d2bd4 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-05-17 +date: 2024-05-19 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 f1ddf26d0a3b78..4ab64f5d4b4399 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-05-17 +date: 2024-05-19 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 49fce71c231715..3f86355c0181f8 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-05-17 +date: 2024-05-19 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 7f7135ff166253..8d3db52c94b8c9 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-05-17 +date: 2024-05-19 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 f15d76343d1da5..7c794eab3226c3 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-05-17 +date: 2024-05-19 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 1d8b1d434f1bbe..4de1d699699c83 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-05-17 +date: 2024-05-19 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 8bc9855effad19..e7b076bab3b75e 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index edb940a1a20ae5..1464cb4466f734 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index bc3e5500f7e519..ba2d7f69053f96 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-05-17 +date: 2024-05-19 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 ecccab49e53adb..3534c2fc00e941 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-05-17 +date: 2024-05-19 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 de2e177b8d43df..dcd724bad4b942 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-05-17 +date: 2024-05-19 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 9aa5b7dbc4989a..9bfd14184f79ed 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-05-17 +date: 2024-05-19 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 d315f52b1e028c..b8c003ebac32a1 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-05-17 +date: 2024-05-19 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 bd9a2bba7bbf14..c868fb33c47653 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-05-17 +date: 2024-05-19 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 1661a32a6d3c70..4b867d907c5d8a 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-05-17 +date: 2024-05-19 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 2d9f16cf8dbf43..3a8bf21c230571 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-05-17 +date: 2024-05-19 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 dab9fb8c7c0b2d..92ec6c14a71b6e 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-05-17 +date: 2024-05-19 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 0602d9f0463bfb..1acc5dccfd1628 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-17 +date: 2024-05-19 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 cd2e9d3f30b2e7..60e04eaee98f0e 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-05-17 +date: 2024-05-19 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 15785d5e9c77d3..73b0519041fd6a 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-05-17 +date: 2024-05-19 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 5c6e086cdbe9c2..cd4b26b47b6be1 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-05-17 +date: 2024-05-19 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 948a680134bf66..8927754bca3570 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-05-17 +date: 2024-05-19 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 d29f81c4b8e70a..90861cf8e0c495 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-05-17 +date: 2024-05-19 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 24e68e14aff395..0cce910bd43260 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index ace5e5c862af65..04678d02029adb 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index a01553de13ec76..2c12ca994bc697 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-05-17 +date: 2024-05-19 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 da0d4980397d0a..0f27b3e7ca06ee 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-05-17 +date: 2024-05-19 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 bb8e9a67fe88fb..afd5c2fb162af9 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index d1f9c494f3a483..adc1cbc8572dad 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 85b4d97d1e0260..ff1e94f3e98423 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-05-17 +date: 2024-05-19 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 d1bb77ed006ef6..3e59a5a4c195db 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-05-17 +date: 2024-05-19 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 db6a1ca512588d..0ffb2adb081355 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-05-17 +date: 2024-05-19 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 55570b4ff6a5b0..95dc28dfcdaaef 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-05-17 +date: 2024-05-19 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 897c86f2883929..6bb855298ecc20 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-05-17 +date: 2024-05-19 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 da0ff135945fd8..e3283711d998d4 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-05-17 +date: 2024-05-19 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 5c8e4075daeecf..f6388d34617809 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-05-17 +date: 2024-05-19 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 36ee250be6b2fd..135ee33ffb808b 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-05-17 +date: 2024-05-19 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 b7c940f5b33772..04e4f1b4e32313 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-05-17 +date: 2024-05-19 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 b1b6dac3edd807..7e28920eb6f3b1 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-05-17 +date: 2024-05-19 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 184b4ec0d7070f..2d2a446c88567a 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-05-17 +date: 2024-05-19 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 207b8f90b309d4..9b2d68dd8f9629 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-05-17 +date: 2024-05-19 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 028b77aa7c2130..da1cd57bdd9556 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index a10ede7ef660a9..e49c8ad046c9ae 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-05-17 +date: 2024-05-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From ca1c5d01ef85d0fdd6fcb6cb76b5fe326e158700 Mon Sep 17 00:00:00 2001 From: Ido Cohen <90558359+CohenIdo@users.noreply.github.com> Date: Sun, 19 May 2024 12:54:25 +0300 Subject: [PATCH 10/97] [Cloud Security] Update Billable Asset List (#183232) --- .../cloud_security/cloud_security_metering_task.test.ts | 5 +++-- .../server/cloud_security/constants.ts | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/security_solution_serverless/server/cloud_security/cloud_security_metering_task.test.ts b/x-pack/plugins/security_solution_serverless/server/cloud_security/cloud_security_metering_task.test.ts index 9871b9e3e4a3cb..205bdd5b663ea1 100644 --- a/x-pack/plugins/security_solution_serverless/server/cloud_security/cloud_security_metering_task.test.ts +++ b/x-pack/plugins/security_solution_serverless/server/cloud_security/cloud_security_metering_task.test.ts @@ -203,7 +203,8 @@ describe('getSearchQueryByCloudSecuritySolution', () => { { terms: { 'resource.sub_type': [ - 'aws-ec2', + // 'aws-ebs', we can't include EBS volumes until https://github.com/elastic/security-team/issues/9283 is resolved + // 'aws-ec2', we can't include EC2 instances until https://github.com/elastic/security-team/issues/9254 is resolved 'aws-s3', 'aws-rds', 'azure-disk', @@ -213,9 +214,9 @@ describe('getSearchQueryByCloudSecuritySolution', () => { 'azure-mysql-server-db', 'azure-postgresql-server-db', 'azure-sql-server', + 'azure-storage-account', 'azure-vm', 'gcp-bigquery-dataset', - 'gcp-bigquery-table', 'gcp-compute-disk', 'gcp-compute-instance', 'gcp-sqladmin-instance', diff --git a/x-pack/plugins/security_solution_serverless/server/cloud_security/constants.ts b/x-pack/plugins/security_solution_serverless/server/cloud_security/constants.ts index 1ea6fea558dad5..2a6d5825746db8 100644 --- a/x-pack/plugins/security_solution_serverless/server/cloud_security/constants.ts +++ b/x-pack/plugins/security_solution_serverless/server/cloud_security/constants.ts @@ -50,7 +50,7 @@ export const BILLABLE_ASSETS_CONFIG = { filter_attribute: 'resource.sub_type', values: [ // 'aws-ebs', we can't include EBS volumes until https://github.com/elastic/security-team/issues/9283 is resolved - 'aws-ec2', + // 'aws-ec2', we can't include EC2 instances until https://github.com/elastic/security-team/issues/9254 is resolved 'aws-s3', 'aws-rds', 'azure-disk', @@ -60,9 +60,9 @@ export const BILLABLE_ASSETS_CONFIG = { 'azure-mysql-server-db', 'azure-postgresql-server-db', 'azure-sql-server', + 'azure-storage-account', 'azure-vm', 'gcp-bigquery-dataset', - 'gcp-bigquery-table', 'gcp-compute-disk', 'gcp-compute-instance', 'gcp-sqladmin-instance', From d5fd38f0623b270f2cbd55421cc5ca47926c0eb7 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Mon, 20 May 2024 00:17:04 +0200 Subject: [PATCH 11/97] [Dashboard] Use `update` method when saving dashboard (#183480) --- .../src/saved_object_content_storage.ts | 4 +- .../src/schema.ts | 1 + .../kbn-content-management-utils/src/types.ts | 7 ++ .../content_management/v1/cm_services.ts | 8 +- .../common/content_management/v2/types.ts | 2 +- .../lib/save_dashboard_state.test.ts | 18 ++-- .../lib/save_dashboard_state.ts | 38 +++++--- .../apps/dashboard/group1/created_by.ts | 95 +++++++++++++++++-- 8 files changed, 142 insertions(+), 31 deletions(-) diff --git a/packages/kbn-content-management-utils/src/saved_object_content_storage.ts b/packages/kbn-content-management-utils/src/saved_object_content_storage.ts index d462c7a02b8ded..36d9979cfdc8ab 100644 --- a/packages/kbn-content-management-utils/src/saved_object_content_storage.ts +++ b/packages/kbn-content-management-utils/src/saved_object_content_storage.ts @@ -375,8 +375,8 @@ export abstract class SOContentStorage } const { value: optionsToLatest, error: optionsError } = transforms.update.in.options.up< - Types['CreateOptions'], - Types['CreateOptions'] + Types['UpdateOptions'], + Types['UpdateOptions'] >(options); if (optionsError) { throw Boom.badRequest(`Invalid options. ${optionsError.message}`); diff --git a/packages/kbn-content-management-utils/src/schema.ts b/packages/kbn-content-management-utils/src/schema.ts index 2e95624c36a22a..5b07a464552c89 100644 --- a/packages/kbn-content-management-utils/src/schema.ts +++ b/packages/kbn-content-management-utils/src/schema.ts @@ -111,6 +111,7 @@ export const updateOptionsSchema = { refresh: schema.maybe(schema.oneOf([schema.boolean(), schema.literal('wait_for')])), upsert: (attributesSchema: ObjectType) => schema.maybe(savedObjectSchema(attributesSchema)), retryOnConflict: schema.maybe(schema.number()), + mergeAttributes: schema.maybe(schema.boolean()), }; export const createResultSchema = (soSchema: ObjectType) => diff --git a/packages/kbn-content-management-utils/src/types.ts b/packages/kbn-content-management-utils/src/types.ts index 72f2093acf2ad1..6417d9af1e8881 100644 --- a/packages/kbn-content-management-utils/src/types.ts +++ b/packages/kbn-content-management-utils/src/types.ts @@ -173,6 +173,13 @@ export interface SavedObjectUpdateOptions { * Defaults to `0` when `version` is provided, `3` otherwise. */ retryOnConflict?: number; + /** + * By default, update will merge the provided attributes with the ones present on the document + * (performing a standard partial update). Setting this option to `false` will change the behavior, performing + * a "full" update instead, where the provided attributes will fully replace the existing ones. + * Defaults to `true`. + */ + mergeAttributes?: boolean; } /** Return value for Saved Object get, T is item returned */ diff --git a/src/plugins/dashboard/common/content_management/v1/cm_services.ts b/src/plugins/dashboard/common/content_management/v1/cm_services.ts index e1fa81338a192d..6ef1e8085deaa7 100644 --- a/src/plugins/dashboard/common/content_management/v1/cm_services.ts +++ b/src/plugins/dashboard/common/content_management/v1/cm_services.ts @@ -11,6 +11,7 @@ import { savedObjectSchema, objectTypeToGetResultSchema, createOptionsSchemas, + updateOptionsSchema, createResultSchema, } from '@kbn/content-management-utils'; @@ -76,6 +77,11 @@ const createOptionsSchema = schema.object({ references: schema.maybe(createOptionsSchemas.references), }); +const dashboardUpdateOptionsSchema = schema.object({ + references: schema.maybe(updateOptionsSchema.references), + mergeAttributes: schema.maybe(updateOptionsSchema.mergeAttributes), +}); + // Content management service definition. // We need it for BWC support between different versions of the content export const serviceDefinition: ServicesDefinition = { @@ -104,7 +110,7 @@ export const serviceDefinition: ServicesDefinition = { update: { in: { options: { - schema: createOptionsSchema, // same schema as "create" + schema: dashboardUpdateOptionsSchema, }, data: { schema: dashboardAttributesSchema, diff --git a/src/plugins/dashboard/common/content_management/v2/types.ts b/src/plugins/dashboard/common/content_management/v2/types.ts index 00859c1f5cae6a..dcb45f9b44c549 100644 --- a/src/plugins/dashboard/common/content_management/v2/types.ts +++ b/src/plugins/dashboard/common/content_management/v2/types.ts @@ -32,7 +32,7 @@ export type DashboardCrudTypes = ContentManagementCrudTypes< DashboardContentType, DashboardAttributes, Pick, - Pick, + Pick, { /** Flag to indicate to only search the text on the "title" field */ onlyTitle?: boolean; diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts index 86221b8b8110aa..5783c463deea9b 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts @@ -27,7 +27,15 @@ contentManagement.client.create = jest.fn().mockImplementation(({ options }) => if (options.id === undefined) { return { item: { id: 'newlyGeneratedId' } }; } - return { item: { id: options.id } }; + + throw new Error('Update should be used when id is provided'); +}); + +contentManagement.client.update = jest.fn().mockImplementation(({ id }) => { + if (id === undefined) { + throw new Error('Update needs an id'); + } + return { item: { id } }; }); const allServices = { @@ -61,10 +69,8 @@ describe('Save dashboard state', () => { }); expect(result.id).toBe('Boogaloo'); - expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( - expect.objectContaining({ - options: expect.objectContaining({ id: 'Boogaloo', overwrite: true }), - }) + expect(allServices.contentManagement.client.update).toHaveBeenCalledWith( + expect.objectContaining({ id: 'Boogaloo' }) ); expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: `Dashboard 'BOO' was saved`, @@ -88,7 +94,7 @@ describe('Save dashboard state', () => { expect(result.redirectRequired).toBe(true); expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( expect.objectContaining({ - options: expect.objectContaining({ id: undefined, overwrite: true }), + options: { references: [] }, }) ); expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts index 93f535b9b4d408..68de7ab9f53495 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts @@ -186,19 +186,33 @@ export const saveDashboardState = async ({ * Save the saved object using the content management */ const idToSaveTo = saveOptions.saveAsCopy ? undefined : lastSavedId; + try { - const result = await contentManagement.client.create< - DashboardCrudTypes['CreateIn'], - DashboardCrudTypes['CreateOut'] - >({ - contentTypeId: DASHBOARD_CONTENT_ID, - data: attributes, - options: { - id: idToSaveTo, - references: allReferences, - overwrite: true, - }, - }); + const result = idToSaveTo + ? await contentManagement.client.update< + DashboardCrudTypes['UpdateIn'], + DashboardCrudTypes['UpdateOut'] + >({ + id: idToSaveTo, + contentTypeId: DASHBOARD_CONTENT_ID, + data: attributes, + options: { + references: allReferences, + /** perform a "full" update instead, where the provided attributes will fully replace the existing ones */ + mergeAttributes: false, + }, + }) + : await contentManagement.client.create< + DashboardCrudTypes['CreateIn'], + DashboardCrudTypes['CreateOut'] + >({ + contentTypeId: DASHBOARD_CONTENT_ID, + data: attributes, + options: { + references: allReferences, + }, + }); + const newId = result.item.id; if (newId) { diff --git a/x-pack/test/functional/apps/dashboard/group1/created_by.ts b/x-pack/test/functional/apps/dashboard/group1/created_by.ts index 0d6eddf603d6e0..00c280f28f96d6 100644 --- a/x-pack/test/functional/apps/dashboard/group1/created_by.ts +++ b/x-pack/test/functional/apps/dashboard/group1/created_by.ts @@ -9,25 +9,69 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'visualize', 'lens', 'timePicker']); + const PageObjects = getPageObjects([ + 'common', + 'dashboard', + 'visualize', + 'lens', + 'timePicker', + 'security', + ]); const esArchiver = getService('esArchiver'); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); - const config = getService('config'); + const security = getService('security'); + const testSubjects = getService('testSubjects'); describe('created_by', function () { const DASHBOARD_NAME = 'veryuniquemydashboardname'; - // this is the user that will be used to create the dashboard - const username = config.get('security.disableTestUser') - ? (config.get('servers.kibana.username') as string) - : 'test_user'; + const USERNAME_1 = 'global_dashboard_all_user_1'; + const USERNAME_2 = 'global_dashboard_all_user_2'; + before(async () => { await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' + ); + + // ensure we're logged out so we can login as the appropriate users + await PageObjects.security.forceLogout(); + + await security.role.create('global_dashboard_all_role', { + elasticsearch: { + indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], + }, + kibana: [ + { + feature: { + dashboard: ['all'], + visualize: ['all'], + }, + spaces: ['*'], + }, + ], + }); + + await security.user.create(USERNAME_1, { + password: 'changeme', + roles: ['global_dashboard_all_role'], + full_name: 'global dashboard all user 1', + }); + await security.user.create(USERNAME_2, { + password: 'changeme', + roles: ['global_dashboard_all_role'], + full_name: 'global dashboard all user 2', + }); + + await PageObjects.security.login(USERNAME_1, 'changeme', { + expectSpaceSelector: false, + }); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); @@ -39,25 +83,58 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { + // logout, so the other tests don't accidentally run as the custom users we're testing below + await PageObjects.security.forceLogout(); + await security.role.delete('global_dashboard_all_role'); + await security.user.delete(USERNAME_1); + await security.user.delete(USERNAME_2); + await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.unload( 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); + await kibanaServer.importExport.unload( + 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' + ); + }); + + it('shows creator column', async () => { + await testSubjects.existOrFail('tableHeaderCell_createdBy_1'); + await testSubjects.existOrFail(`userAvatarTip-${USERNAME_1}`); }); it('can filter by created_by', async () => { await listingTable.expectItemsCount('dashboard', 20); - await listingTable.selectUsers(username); + await listingTable.selectUsers(USERNAME_1); await listingTable.expectItemsCount('dashboard', 1); expect(await listingTable.getAllItemsNames()).to.eql([DASHBOARD_NAME]); // unselect the user and select "no owner" option - await listingTable.selectUsers('null', username); + await listingTable.selectUsers('null', USERNAME_1); await listingTable.searchAndExpectItemsCount('dashboard', DASHBOARD_NAME, 0); // select the user and unselect "no owner" option - await listingTable.selectUsers('null', username); // select the user and unselect "no owner" option + await listingTable.selectUsers('null', USERNAME_1); // select the user and unselect "no owner" option await listingTable.expectItemsCount('dashboard', 1); }); + + it("doesn't override creator when editing a dashboard", async () => { + await PageObjects.security.forceLogout(); + await PageObjects.security.login(USERNAME_2, 'changeme', { + expectSpaceSelector: false, + }); + await PageObjects.dashboard.navigateToApp(); + await testSubjects.existOrFail('tableHeaderCell_createdBy_1'); + await testSubjects.existOrFail(`userAvatarTip-${USERNAME_1}`); + await PageObjects.dashboard.gotoDashboardEditMode(DASHBOARD_NAME); + await PageObjects.dashboard.addVisualizations(['A Pie']); + await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME, { + waitDialogIsClosed: false, + exitFromEditMode: false, + }); + await PageObjects.dashboard.gotoDashboardLandingPage(); + await testSubjects.existOrFail('tableHeaderCell_createdBy_1'); + await testSubjects.missingOrFail(`userAvatarTip-${USERNAME_2}`); + }); }); } From 743ddd48cbc8787787f97ea2ea9227030c87b3b9 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 20 May 2024 01:24:24 -0400 Subject: [PATCH 12/97] [api-docs] 2024-05-20 Daily api_docs build (#183804) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/712 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_utils.devdocs.json | 37 +++++++++++++++++++ api_docs/kbn_content_management_utils.mdx | 4 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 6 +-- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 693 files changed, 732 insertions(+), 695 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 11dd89c47341d8..0d8591b85a84c8 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-05-19 +date: 2024-05-20 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 32724d2ca081dd..e9a421e888be23 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index cced971507bf5e..e02245146f91be 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 7f1f52aacca2e9..7ecce04ce1e653 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-05-19 +date: 2024-05-20 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 530bc180929286..b28eb1bfdaf88c 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-05-19 +date: 2024-05-20 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 b9903e6784f212..2c3da0893ff2a3 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 559b38996e15ee..f50b0eea773706 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index e10ea7d67e809e..b0ff0227b6d018 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 93fbf6523e61a4..401513ef27e183 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 3c4c2350ccd577..31fbbf7e94578c 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-05-19 +date: 2024-05-20 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 4e6d0e7a2563be..bba0e4c29bab6e 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-05-19 +date: 2024-05-20 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 851f2733e9bf81..24ed742c77f026 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-05-19 +date: 2024-05-20 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 8de69bb06c6278..1c3da2e8f72364 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-05-19 +date: 2024-05-20 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 7d49b1b0da8b6d..1307d78b19c434 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-05-19 +date: 2024-05-20 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 0fe0c5d0b8cd09..ae1f4c9893e4fd 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 64e57285301f44..3c32678ea6a9df 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-05-19 +date: 2024-05-20 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 1839187c9c18ea..8de28a174848f0 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-05-19 +date: 2024-05-20 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 69c8ffaac70815..e6e64081f48169 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-05-19 +date: 2024-05-20 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 22363cf433b5e6..d3be4f1ecfc58c 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-05-19 +date: 2024-05-20 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 18bb6e269a6b88..c8c436075e0062 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-05-19 +date: 2024-05-20 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 e5b72387aa1cd8..3d97d8d324d82c 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 8bd7ae850f7041..4bb2d4f5b695e8 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-05-19 +date: 2024-05-20 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 c693d06311c0c6..d20c0d817bad28 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-05-19 +date: 2024-05-20 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 7de9cd7646bba2..ebc2ca136d543b 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-05-19 +date: 2024-05-20 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 9e67243b7c78bb..ed8a799c2e890d 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-05-19 +date: 2024-05-20 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 2e75aed52f43d1..1a5d1f793c6245 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-05-19 +date: 2024-05-20 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 9aecb3f82146ac..72ec9098d970b7 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-05-19 +date: 2024-05-20 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 e0a9d1c6d21e14..f9e1313b825b55 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-05-19 +date: 2024-05-20 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 2919ce24d213e7..e14fbb84c8c3e0 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-05-19 +date: 2024-05-20 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 68632dab626d7b..47f679b6486877 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-05-19 +date: 2024-05-20 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 d99623e567cda7..dc854eb2bc307d 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 8a1e9c1d7fbd0d..be2d13723e34be 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-05-19 +date: 2024-05-20 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 453ae215e59236..0ce9929024c753 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 1db255d2acc2de..5cc8ac5c6b11bd 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 1d2805d3391acf..7fdfb650df82d8 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index c721be1c893ba8..18390038fa5007 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 4fb4ddf26c3e3f..919da7d93a1748 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index ce4aff7653804a..fe61ae6d29a50e 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-05-19 +date: 2024-05-20 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 445800ed9160ca..14de89d8f6e4b4 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-05-19 +date: 2024-05-20 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 a5f190411dac0b..653c09fe0385f6 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index ac03dcc9a8694f..97c75e0d7949eb 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 3cf6946623eff1..4c6d8f24223abb 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 008a708c45ecfa..c1d9e7f1f3dabf 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 07b4376b2e3f10..757f36c217e317 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-05-19 +date: 2024-05-20 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 650ff42557ef0b..3bd9e45fbb55fc 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-05-19 +date: 2024-05-20 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 b3ee2e654206fd..0f027d6476aab2 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 00f82ad3ac2af5..df612f3ba58c09 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index e0d45792fd5b22..bfbce14d2f28a6 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-05-19 +date: 2024-05-20 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 f1e7c554ddd523..a143a6710e4fa7 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 45b552731f678a..6305e112cb7633 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index f972f5103ecd3d..67bf2d55c88caf 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-05-19 +date: 2024-05-20 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 916c182d0123aa..ea5ad4f14611ce 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-05-19 +date: 2024-05-20 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 7a2857395ff3a5..13ddadc0355f10 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-05-19 +date: 2024-05-20 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 c9922741355fdf..7b7e8b16fe3d9c 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-05-19 +date: 2024-05-20 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 fd7495c5043d8d..36a025e989bd6a 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-05-19 +date: 2024-05-20 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 bd3c1ebb942893..2ed037401a5eeb 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-05-19 +date: 2024-05-20 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 17b8602af1bcc4..0a2f7f52ae824b 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-05-19 +date: 2024-05-20 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 b504a433b5d3dc..de0d33b3fe139d 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-05-19 +date: 2024-05-20 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 e6c8ff76a623b9..81552f2a713901 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-05-19 +date: 2024-05-20 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 0f7c45f96c19b3..0d361a1ef6ee5f 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-05-19 +date: 2024-05-20 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 158fc71f7d7828..3221b1bc913910 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-05-19 +date: 2024-05-20 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 618fa37e48ada7..c41d008ceab6d0 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-05-19 +date: 2024-05-20 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 5e8e4b277eccfb..857bb8256b2ec2 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-05-19 +date: 2024-05-20 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 bee5052bcbd27f..36feeaee47c02f 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-05-19 +date: 2024-05-20 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 12d6f0a61995c9..9a90063d9957ab 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-05-19 +date: 2024-05-20 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 14857a2b11507e..8e952fd6518609 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-05-19 +date: 2024-05-20 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 e93644dd2385e6..e06c1d1c230648 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-05-19 +date: 2024-05-20 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 fce73a3473b639..a693e34dcd7487 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-05-19 +date: 2024-05-20 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 028001e047de89..870212a3293ee1 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-05-19 +date: 2024-05-20 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 c9352d8cfcd6db..7bb838c05c90fa 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-05-19 +date: 2024-05-20 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 d2a6c31d673dd2..ac9ae8788cf906 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 3657e7e95773a4..75ac3909b94082 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index f422b8a472ca0b..ee0269cb007a6f 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-05-19 +date: 2024-05-20 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 1b607010ac0336..3541f8296b9b60 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-05-19 +date: 2024-05-20 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 904ce7f4c97b3c..8f14b511df1933 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-05-19 +date: 2024-05-20 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 14027fc7de1a2d..5f558f384c873a 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-05-19 +date: 2024-05-20 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 28773c5dbaf7b6..3f71772224b123 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 48517194255ee5..ac72aa6d904f74 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 5f4afd14895cd9..d85f5f4552cb14 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 379fa0ab13e71a..a72b9a69056585 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index c6cf4bd9268fe0..ce43a012265d93 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-05-19 +date: 2024-05-20 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 fe72278b9acd90..5d011943364356 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-05-19 +date: 2024-05-20 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 0281922427ba02..75116cba2206b3 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 742ddb736df31f..2218cc06aec6f4 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index d4e7e86f8edf7e..37b1ce851614a2 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 933d8d46733d37..6d2d3f466d0b70 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index b7ce01896c5317..a244910fe2af84 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 6c58ae60c91c49..bd3e35c9109500 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index db73f6b482881f..f8a768273a666b 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index fa4e73e9c6c9c7..f69d8259e75543 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index bcb69928df8ccc..a40a003ea3ad4c 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 1f10238ccb7dd3..0ceaddc5d97c61 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-05-19 +date: 2024-05-20 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 c61648313adb71..e6d44f5fc12afa 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-05-19 +date: 2024-05-20 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 04134b564606af..11475be46c8e8a 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 0cb9937c8d8bce..a63f4e6cc0ff22 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 9cb066f5672c93..7d57f62f663835 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 e5cf81fbbdaa6a..2454fb1be5b45a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-05-19 +date: 2024-05-20 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 c9c9631affa010..3a6988d2f10834 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-05-19 +date: 2024-05-20 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 90532ab1ca6ef1..2194b53b01c673 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index a225be22f7c9a3..d24056e55af3aa 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 0dbf35ed1147da..4ebcfcea511282 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index afb4a4439150fb..5a2b271647f7a5 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-05-19 +date: 2024-05-20 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 51b900db4ef99d..33a7e8454d3624 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-05-19 +date: 2024-05-20 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 356064445b905b..b8771eaff3bb92 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 54f44e5406b8af..cd2250bbfe5ac2 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 4f43c519eda356..18493c8dc87186 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 2d2a1001a95c24..d2b31ce98859ca 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index f563389c11bcc1..0eee9d95b4a8fd 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index d9ea1e00189f60..29518f89e58484 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-05-19 +date: 2024-05-20 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 8f897c3afbadd8..6188e8d4e43104 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-05-19 +date: 2024-05-20 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 cd4eb2a58b520b..d1060783d23e5d 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-05-19 +date: 2024-05-20 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 fb28e85ad8b051..534410c9302da7 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-05-19 +date: 2024-05-20 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 2f3e5d11118ce9..b0e473d635928e 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-05-19 +date: 2024-05-20 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 c9b0b5a1076b70..9f8ec810a0beb9 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-05-19 +date: 2024-05-20 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 e6d5a297c28964..ce73f8f8cca07e 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-05-19 +date: 2024-05-20 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 76984819269785..69067a211490d4 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-05-19 +date: 2024-05-20 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 714af7150e3f60..6ab116495d9bb9 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 6a070259dc974f..e5a09418a4cf74 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index ad3c75067aaa17..86fa8a1239df44 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 0fff7097f0c0df..cd38f5bf1a8d20 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-05-19 +date: 2024-05-20 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 b6c1c3942cde54..3f71b281bebfe2 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-05-19 +date: 2024-05-20 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 6787e1bd0ed424..b860f3d4dbb49f 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 2358d2abf08547..99427ae6913026 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-05-19 +date: 2024-05-20 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 f3e5a319f8c129..282e87f93cf19b 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-05-19 +date: 2024-05-20 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 4df030adc9c3e4..f0730ac49dc9f8 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-05-19 +date: 2024-05-20 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 80b0ef61daf1d6..e9dd9c590fe783 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index f6e848d860c2f5..4ea257e9f46937 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index ff279e9fb1f97a..eba7e73df28e3c 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index 13e2736f70f286..f980f0d987f71b 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -2642,6 +2642,22 @@ "path": "packages/kbn-content-management-utils/src/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.SavedObjectUpdateOptions.mergeAttributes", + "type": "CompoundType", + "tags": [], + "label": "mergeAttributes", + "description": [ + "\nBy default, update will merge the provided attributes with the ones present on the document\n(performing a standard partial update). Setting this option to `false` will change the behavior, performing\na \"full\" update instead, where the provided attributes will fully replace the existing ones.\nDefaults to `true`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-content-management-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -4086,6 +4102,27 @@ "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.updateOptionsSchema.mergeAttributes", + "type": "Object", + "tags": [], + "label": "mergeAttributes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "" + ], + "path": "packages/kbn-content-management-utils/src/schema.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 119bf9d34f04df..f5ad856df42f23 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 192 | 1 | 126 | 0 | +| 194 | 1 | 127 | 0 | ## Common diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 0bb00924e7b97a..60a7faf24d75ee 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 dd7785d874219b..52d781de782fc6 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 26df108b520f45..f1cf5126f992ef 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 14eee9d6933aaf..2f4a695a3ed538 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-05-19 +date: 2024-05-20 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 7f001ac13c78e8..eff968fe20d2df 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 58e66e1ee76132..185158860feeec 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 e64a98628d68f5..3d0ea8e3ec7d67 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 15dbff7dac3b99..ecc47ebaa0cfcd 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 555c29c1e3079f..c776bc132b6358 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 8fb183f9247a18..9e4c892189ffae 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-05-19 +date: 2024-05-20 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 09c4933cbce855..c7cdaa131350d5 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 0c60ba7c4de415..8b8ceb5dcdc304 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d5dbf7531af3d4..86c9e52e0e3f07 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 02848e04d43681..81f88c68b532c3 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 66a93117b234db..119defe80e8d8f 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-05-19 +date: 2024-05-20 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 fc185cd2ef82ac..c2898e2946b880 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 10340b102ea2d4..5f13b1c5433d8b 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 7bdc73ee5b2b0b..b52877a793a780 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 81caa7ad9084d0..893d300a007c70 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-05-19 +date: 2024-05-20 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 fde7097996836d..a79edf2889cc0d 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-05-19 +date: 2024-05-20 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 af10d184da57a1..af6110cdeb0d0d 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 a5dca3b579cff1..561f388dc48560 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 b43596991deb2f..6b1c3c2669c580 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 88e6801d43d011..809ec82628dc20 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 dd07dff5be9454..1888c71dc222e2 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 a13dfd30a88a40..d872ef0b244f06 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 cb1a44dacd179b..8dc1b7e7b1d643 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 dfd6d67c983b12..c71457189c7b03 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-05-19 +date: 2024-05-20 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 48b967cf16e02e..cd134fe1ca8993 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-05-19 +date: 2024-05-20 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 23a86061b9a18d..30e01ce4f57fee 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 779a24ffed1fa4..3dd58bffce2a18 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 315356abdd171d..bb4457182fb78f 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 53c27b538c5a5c..b92742537b0cf7 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 e18f012d98bcfe..5a8c0b1d390ec0 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 a2fea3616d994b..11cbe6769aca85 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-05-19 +date: 2024-05-20 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 7415fa6127a7d6..4ebdebbcefc411 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-05-19 +date: 2024-05-20 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 c8b7fd19a9e61f..d1d60c1286e565 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 ec6c2b73fa53e4..65ddf2ae2bfa3f 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 6de7f3a0dfe309..21b43244656957 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 a9a26fde82100d..936e409ff66d39 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 fd1a8a1c8e28bb..8b86585b416853 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-05-19 +date: 2024-05-20 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 aed7d4d463ac8d..58cb78c71fe101 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 6aeac120fe266d..8ac84befbf69c9 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 830ce217199b1d..30511a404be73f 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 1cd6aabe217df6..d0ff8f1de473fe 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-05-19 +date: 2024-05-20 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 b7a33cf64db966..d7f6cc37203875 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 f5463525d6e90d..fac72a013f43b9 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 74d9eb1c2cda0a..4127b498872203 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 0df079cbff20f7..cdeced5ebdd5ff 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d6ac073e20cb55..013294e2d76228 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 f5da47fef12540..8621e8d3c2e2e7 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 64dbfd9e8ed67d..69587202b0f55c 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 b009e0f7adfd79..2c43e99c5be70c 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-05-19 +date: 2024-05-20 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 ef1620aa557df2..650c2c5883b56c 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-05-19 +date: 2024-05-20 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 c270464b48f2d2..58ee74f8370639 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 3097b0096a6928..a1a31922adb06e 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 f461cc8f1893c5..81ffc36c9db11e 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 2a8ac5e2dbcbed..d79fa0cc8cb875 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 e58e318955a806..2ffc1dac97282a 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 346653cacf75ba..51ab111ca359be 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 2d0b54418f7f85..426ce00b4bd152 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 022adef2b3dea3..9d396f7034a824 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-05-19 +date: 2024-05-20 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 adb59143d87b62..f1d3850165adb7 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 ffe7cfdf157c5e..41b759d54336b0 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-05-19 +date: 2024-05-20 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 f49d6e5ed1b4f2..510eb73db7c094 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-05-19 +date: 2024-05-20 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 bfabbefa8a31e1..c5f3f2ba852686 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 00bd857377fee3..f6791e889e18f0 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 9bc5167b6ba4af..32b1a6dcafc430 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 2db128be3265a4..f5febc6f537641 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 4e01377f6fd3e6..cfd001143db62b 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-05-19 +date: 2024-05-20 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 c5a90500848e21..f12330784e8680 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 eb5c4cae33cb90..ae39c8aa3f7a7e 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 c4c43841255df4..23a25a57d3eb26 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 30625ac4028e82..8ad00b1a48823f 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 534c5d4f156c33..32cd401da773a3 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-05-19 +date: 2024-05-20 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 0266f2d3f46d2f..0854f4c38ea984 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 69ccbed74d51ef..7f47ab316c544a 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 9a9beed13099e6..34a1c903816290 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 cd6e31d3a659e0..9c91f7b5c652e0 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 7c4a7b3700a045..84709ef3d39aed 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 8ac64bc776a121..1b414a10e89b7c 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 b903ed99ee73dc..de22679913fb2c 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 14adb71d65f754..d25d1d6e7ca21e 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-05-19 +date: 2024-05-20 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 d5f952f08a1922..ee4919ebf5e8ab 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 6f8f801e89be1c..1714bfd1845149 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 7aff403a1f66e6..1880edca44f265 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 e688d679fecaec..c552d5b5c66d84 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-05-19 +date: 2024-05-20 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 81582c9f2811a6..e23a75f178d168 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 74a7d2f085e95b..fa24293b7e312a 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 c91a95c212fa2a..f3b2b9e9767aa4 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 0346151457efc4..0d9a4d1466990d 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 a10cba9705473b..6d5a874cdcab84 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-05-19 +date: 2024-05-20 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 259c87243016b6..b3f6385ab4c766 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 574176abac6475..74375c8683d14d 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 1b1a4cef9526bc..f40af57c33616e 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 92087f8d572662..0d23253462dfb8 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-05-19 +date: 2024-05-20 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 ad7c41557ff61b..3687e2abd36c73 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 18612d7e9081f6..394035fd76cfd7 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 1e133c6c3a65a7..79b00ba8647928 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 36dfbd8a920aca..64b82ef3698b99 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 63fd3dc396f74c..d754835110cb84 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 eaafb64ed4826e..477ae5b0578354 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 81532791c506ea..3327fa9b318aeb 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 ef0ca492aa62aa..c657290d23f3b3 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 4aafa0c9fd707c..f87edc5118822c 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 8adb963e6a2533..6a85a491636be3 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index e886f6a36b5f95..a147aae398d78a 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 20bd8ec832c206..41d446c49fd61e 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index fdf03233f7b580..b088e990af2aab 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-05-19 +date: 2024-05-20 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 6960d72ce2bfb0..e93e9f10e06557 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 db561161ca40dd..6f5cdb2cc81af6 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-05-19 +date: 2024-05-20 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 0a257fe3eecd18..c7620c8dab10a8 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 743ed3c4c59070..983f50bf928638 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 ef740419c727ed..8edd076bae49f4 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 2aad41bd0f131a..a6c75edb284e30 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 6eb8f5c82c69cd..646f86ddffb1d5 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 8910eed34caadd..d0546587273534 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 e3a5a9cea9df3a..bf16f75d077d56 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-05-19 +date: 2024-05-20 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 eedb1366ec25d4..69104f882c95b6 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 bf3b74f97df035..1215cbdf6be487 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 662a7bd8a7fe5b..c684ae28d93d77 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 82f98ecd08aa78..873f0c5a8ca7c8 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 f7a2036100e245..558e408949bc13 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 523a24a7809777..385b9057258c14 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index ffd56ab0776590..05671677309118 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-05-19 +date: 2024-05-20 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 4180b7496a08f1..787138c6f15cf7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 a6ca6277492b10..af20d6a5b716a3 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 608a8ea2964643..547e8c067421ee 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 b2e193fb082d30..afc85c60d3b77a 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 f51dcfae05cdde..7a316b93c571db 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-05-19 +date: 2024-05-20 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 c5be2fc03ba430..3d4f73061547b2 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 6edeb8f0b02322..9075e800153020 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 f97abdc8ecd2e1..4cd03e888abab0 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 2c03a42e582aec..a130b207b281dc 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 64ef5758ac9849..886714cdf8b5c6 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index fe03eaafd229bb..9a4e4ab30250c7 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index da26c8e79bf296..784b57ee9703f7 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 3ca51a043d6218..d0e080e22ff5d0 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 6084c9be4600e8..699fa40e70673e 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 9cc05841746ce6..81cb5989b1a831 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 0b711ff976e1bc..cbe81ddc53c79f 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-05-19 +date: 2024-05-20 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 5faf9d0f26a147..a6ab0cdded4aeb 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 ce06c6e7c2c0d4..0b6f7c0cb560d6 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-05-19 +date: 2024-05-20 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 e23233d7c0c06c..6727001ea7d804 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 1233007246c869..557c4a6e00dd40 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 b9c0e485c98ce5..660b3da203adc1 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-05-19 +date: 2024-05-20 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 e46aec94b84eec..3e666591c85474 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 3852e0d8eb1bf5..8c77a30d6bbcaa 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 1afda534a2abb7..4ba5a9bde15ba4 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 03f06a7113ad2e..60f194cd061db2 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-05-19 +date: 2024-05-20 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 1394cb4af0c870..36bc1e3ebba5fc 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 59cfcc1532a1e2..06557503403783 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 8dadc631a54083..3a597038edc1cd 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 1577dfa24687e1..4a3ef71a5ee38c 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 276706acbd6a86..03c8cea813f478 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 ca9f0b64d6a733..7681ee0ad948ee 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 fff9828c18f1c0..c92582e578de8b 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-05-19 +date: 2024-05-20 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 34b914dbe15e89..878d3a8d57db0f 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-05-19 +date: 2024-05-20 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 a4f61f48392bab..4cf558fca15305 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 ac93510b075309..e5f208c7e76b1d 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 436ce2741bed21..a70b2f2ef2e5d8 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-05-19 +date: 2024-05-20 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 1adea3e28da4d0..6c242087b79ee3 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 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 e0801071f00549..da199ae3915380 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index cf34139a1b6d64..f6a183e6ed4104 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 6e08c336ecfd3f..081ba81ed87c24 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index e28aea02479236..d501ff9d9abfaf 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 21e20d8715333f..51a67737034310 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 8a9641cb9b9dec..62077a80f00a4e 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 80e5d50586682f..c2f3a4d5bba48b 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 47b15eda10b79a..24df1b2fc824e3 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 5d1ade00b2c21c..93aec5bc15e445 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index b5449f0ee12204..beeb99f06dba55 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d6b76c1271729a..e48726adf6cb91 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-05-19 +date: 2024-05-20 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 af0e377335486e..a63c76df61ca31 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index e58db3209f0dfe..8f60f2d77a286e 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 8281b4a48c2504..cd8b527a77f955 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 1ee15ef6fe7848..18e59134e133e5 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index fa708799dc6fc1..77b427641fd067 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index f3c4976db42660..f7c8cd4f79e50c 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index ac8fb4ca7e04ca..b3122f7ae51bd2 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 0fcaa1ce2008c1..aa2394b3a95fd6 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 41c00d8197a446..1d246c0a39d215 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-05-19 +date: 2024-05-20 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 f495bf834056a7..c07271541acd8b 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-05-19 +date: 2024-05-20 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 9ed0fa5930db0b..6adb69716e382c 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index f13aaaf2fcac95..4fc9389ec9b651 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index be8334064cb0cf..7b777f89de6b15 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-05-19 +date: 2024-05-20 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 2aee860a087616..ed60480d3d0fe7 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-05-19 +date: 2024-05-20 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 78bc4b74ede2f0..8d3ff8af26804f 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-05-19 +date: 2024-05-20 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 3a629de39dbd44..aa1a17f089365b 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index fa64b658cb4c54..187a9890bda0d9 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index bae5e89dc470a5..a4b5c02061939e 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index ceca28dc39c443..03124f5a248c1f 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-05-19 +date: 2024-05-20 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 d1e69be97bce95..36894a36fd4683 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-05-19 +date: 2024-05-20 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 05ffa8847ba62b..7dd0d287bacf44 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-05-19 +date: 2024-05-20 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 88fa050c37ae05..ce652d54e07ab5 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-05-19 +date: 2024-05-20 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 6be3743f66f245..c46e74bd04532c 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-05-19 +date: 2024-05-20 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 c246d6375a0279..6918c4038640c2 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-05-19 +date: 2024-05-20 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 4bc324c81c4b0d..9868b513092514 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-05-19 +date: 2024-05-20 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 7aaf32bea3a9e6..772a9c2e99188f 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 2e69a45425d8f0..2bb02673cbaec9 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 98a68eb861fe41..cab07f28209d17 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-05-19 +date: 2024-05-20 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 0b39b0d3679c2e..0358613769c728 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 e353f8fa59d7c0..64ffd0d644200e 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-05-19 +date: 2024-05-20 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 a003f934c53429..b9973c05fa579c 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 654399701e8cf7..a3030a1edd466f 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 7f0c74f33fa8e5..962f4257ed9c15 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index bfc340a9fcfda6..0bc60bbc90ce4f 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index a168d2b35810a0..1d9c881ebc3792 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 89a8dcfdc4f786..7fdc3856050d66 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 81e985c9dc0dc5..7509c63e779217 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-05-19 +date: 2024-05-20 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 c91cb25d6728f8..f6680c048cf14d 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-05-19 +date: 2024-05-20 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 97d8f64748b699..f49662d452cedb 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-05-19 +date: 2024-05-20 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 d20db8db271245..1f865d800f1539 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-05-19 +date: 2024-05-20 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 f2c847acb689a8..8a65e5353d999a 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-05-19 +date: 2024-05-20 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 950b5bab493119..f9894eb340d787 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 8aa7a4910914f4..c73424f7578d0c 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 57a87d9a80f8fa..3185b83461179a 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 94adb9d385df30..6891661b0b28c7 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 1cfabdaf820d70..bee7e2673330fd 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 8d6465aef2dea8..a0edca96484e44 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 06e70f74542574..4f18c95f49ca23 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-05-19 +date: 2024-05-20 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 16cb909cb6a4b0..8b92a98dab6e5f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index a2eca61da21ec4..e1cb1259a8b1bc 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index d4b7ea6f5119bd..3724a34fad00ba 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 18933ef036ed15..648c023f14d6f8 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 15ebd881c1c7ae..b545e7c3c5b34c 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 25c315b38ff937..6681c12e8d1114 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 490d5c14c5564b..9ac51a310dad37 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-05-19 +date: 2024-05-20 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 c80d688d7da93f..068cf2df7e15f6 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-05-19 +date: 2024-05-20 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 3e5c4463fe0989..62cc1c4471aa09 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 573b442be9b5ef..4ccfe0bb2217bf 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-05-19 +date: 2024-05-20 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 d124395053442b..434c0ea1c88f6c 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-05-19 +date: 2024-05-20 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 7f9ba16f62cddb..e4c64d5be26254 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 cde3456b1d4da3..bc245facc9d6b6 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-05-19 +date: 2024-05-20 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 aa5dcc6d03ec5a..f5260f6eb7e11b 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-05-19 +date: 2024-05-20 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 772cc001fff35f..bb719406e334ee 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-05-19 +date: 2024-05-20 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 9148fd24922ffe..a0bfa7bf67e25a 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-05-19 +date: 2024-05-20 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 72410e20a9ffbd..7c4c02c29dede3 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-05-19 +date: 2024-05-20 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 11a682fbff4d29..eaa27c6b9303a5 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index e6face4463af68..aad52fba0f7829 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index c9837c6b33bd95..dae37620023b2d 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 29785b51fc6ac1..8252010eecb303 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-05-19 +date: 2024-05-20 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 abdcb4925d5393..13232cc3f0076c 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-05-19 +date: 2024-05-20 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 f624d864c9b934..387b707ef33bf4 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 499df74c38df6e..5e5cf0f6b75704 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 7a362a201293ce..9d53dc3928e035 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-05-19 +date: 2024-05-20 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 f29b0f26530986..a88d3370f87374 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-05-19 +date: 2024-05-20 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 b4e6452728084d..70a94bda1b19d7 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-05-19 +date: 2024-05-20 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 2d8b26d64bb944..73e8a08a8db27c 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-05-19 +date: 2024-05-20 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 750dd2cbb74853..b5e3a51ddc953e 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 5902f87ce2003a..d7cff9a6985931 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 94edffd4284db2..06dae205273db2 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index ee97a4715d551a..fa0cc30a662796 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-05-19 +date: 2024-05-20 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 3e8d026159bb88..3a2c914d8972f8 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index a1333ee4b06f8c..c853f7684ffdf5 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 2d907e51a3c14e..bb5564aa4a8ed1 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-05-19 +date: 2024-05-20 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 55e7a5478fafef..a26885eaf8dfce 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index a839f48d336715..9a8776cf9eac44 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 7549bda1c31bcd..20fab4480b4df6 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index db56d069cf0b36..3319f91551d56b 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index d7d77fc04e04a3..0103222f036d75 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 48ca77d59ea9da..d095a0f3ce8a3b 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 8b73f898359c86..0395cea5320713 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 6ccecf014d2cea..1ab0cdfdfc766b 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 8c3e958d4746a9..c1568de1b76f52 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index cf1fbeddee7f3b..108d8de81ef671 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index f19fd86456f4f1..3f1ebe9b732742 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 4654d04980bae4..721d1e5c06122c 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-05-19 +date: 2024-05-20 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 943f7b16528678..f36575c2e9e0fc 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-05-19 +date: 2024-05-20 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 9209107e09dabb..944c37620fca09 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 bd63c5f1c86fb7..691f13089edfc5 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 5e2f3b0e367deb..4627bcb5da05d3 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 0fde6af38016b5..c534bb98129bf6 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 6bd8d6b90b4ee1..cf13409ca1bc2d 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index e9cf6b22c55ade..96ef4dce826c21 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index d46d08a302f356..2e815aec2dfbac 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 f9499123f359a8..06944e51e96fe7 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-05-19 +date: 2024-05-20 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 538b6c1a3ace44..54c601b060b362 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-05-19 +date: 2024-05-20 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 d70ee203990b15..726a77c042d8ee 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 90aeb8b9379bfb..bb0a28fae804bd 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 00012f83863962..8256a5b17dcccf 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 4eb7074bc1ca97..7d2b3849c30b2f 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-05-19 +date: 2024-05-20 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 c65bd14a02117c..6727da83c11385 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-05-19 +date: 2024-05-20 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 5ae0419fe74f4c..ab24b887d9836c 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-05-19 +date: 2024-05-20 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 ad03c57f7f0797..eec4d49078e269 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-05-19 +date: 2024-05-20 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 ad650c425b7ffe..1038de63310e55 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-05-19 +date: 2024-05-20 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 3ac8c87df606c4..e1abbae79cd0af 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 95d04de9d7da28..e342bce4e66e60 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 0d29a61b19afc6..304cbc9d0c8a9a 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 2ae83b99b6ebab..210206057ace26 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 42ee6a62713964..0387d847c8dab6 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 55eb1dd04c5d28..6fcda645376cf1 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index a7763e6158bde6..75a6555735baf4 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 07f6672ccaca54..461abb8754801a 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index ed4b90d9a1c998..caae8ac2098148 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index e3ca6d746c6e38..14fab7aad9c26f 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index c936b271af7bb6..d1435c05242540 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 6899d20c4c4b3c..f3f7c2bf7b17a7 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-05-19 +date: 2024-05-20 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 271b0ae5dee031..54bda828e2d26e 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-05-19 +date: 2024-05-20 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 f4da0bb4fdc11b..9ddf3b925a45ee 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 4bf2e8ddbd77ea..b0feb7bea04228 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 94bcb4483986c6..0acc2281d3ff6a 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 374f92f4d3c08b..a64760faad9d0e 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index efd97921ceb17c..693f3c620391c3 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 25e9dad4d5edae..0b4676e4d5f19c 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-05-19 +date: 2024-05-20 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 9d278eafc4faea..ffc91d2c719a90 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-05-19 +date: 2024-05-20 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 492afe7ce1f899..0f64d776b1c112 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index f8656e5758809b..d9947f1d9738ef 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 5c4339c97fa9d7..20f1726a4795e2 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index f1d81f0eb2f497..8a3b0fe93837d5 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 4c3110c55aefe9..1db3f00e4c792c 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-05-19 +date: 2024-05-20 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 6a1a3f49cc1739..bcd1f927c30172 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 66672c32771f42..82745e95339987 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index e8419fb9fa45ca..1d69b3c6d2a67f 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 23fe67b022a2e9..275f30a38fd66d 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index a079a9d4c3772c..fe29e85ae2aa93 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-05-19 +date: 2024-05-20 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 ff549ce94f6068..e356efd3688015 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 7796291c4e3065..99a18383928509 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index e067de3944c396..4188949e59a4bf 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 52c3c8737884b1..4a873f05cace4b 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index b5143e80ddab57..d06e602a384c71 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 13afb8554a9cfb..9d153e136ade3f 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 73a983e87f7000..b68c77b1d2427d 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 9137ad2d77f810..9afddbcc77bf07 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 14ccc5427516c4..35f66c28ca036f 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-05-19 +date: 2024-05-20 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 7ad4187cbbc3e4..a2315e36827ebb 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-05-19 +date: 2024-05-20 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 4c1c605a004971..60709c8d761753 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-05-19 +date: 2024-05-20 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 622d627b293e59..46edbf94b0306f 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-05-19 +date: 2024-05-20 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 514013aa7b05e0..6110843c5551b5 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index a57514f162d67b..3e20af5537dbde 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index bfbfaf9bcf2bbc..6758cba46782ac 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index dd777315507303..cbae61c8704be3 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 87f89cea7e806e..e8bf737e0cf4d4 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 46ba2982cd3cad..6fcc103f5a36d8 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index d17e856edbef6c..0c83de45b0f789 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index ca6cc0a1d91ac8..e0306685b7dd72 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index ce41e78ee4a315..31fc719ea844e9 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index fdd58f7f99a43d..db9e3868a90986 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index d1c17fb0572cad..057e3b42165763 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index f66b89e3fe7649..75ff9919b52168 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 580a6c54625926..7593302c72d337 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 363f34c92b331d..a1484971540050 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index cb0b8b1a161912..00624f80bdc874 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index c4588fa43d5ed5..434774814e5e1a 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-05-19 +date: 2024-05-20 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 217abd355bf8ad..660759341c092b 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 862318d763b71a..885459bb554775 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index dda7f0c511b4d1..d83b26f6fc7081 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 3b2ed43ee61003..1eda416fa3a51d 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index fff3769e37c317..cf687aaae3b143 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 3d84de88dfe028..343eb75e8bcc33 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 271ad96f854cc9..8166b5a31026a9 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index b32fd70eb12c3c..88ba7c3a0a52cc 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 014e15dce91613..519bec9afc8179 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index bafc12b43eae72..bf526f1d45a54f 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 834c899a96b377..f32b2f136dab71 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index a2d1d8e22519f7..068253b884d66b 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index ad07a0476c1489..7e68576b0b1d9e 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 959f8bfded6b9d..d706a7302fe4ba 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 1e0e9295b4b0ba..a72a4ccc8522c7 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-05-19 +date: 2024-05-20 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 00508df83dca94..7b2b9cd6e792f4 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-05-19 +date: 2024-05-20 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 7f7a6e744592f0..ed2d948903f0c0 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-05-19 +date: 2024-05-20 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 d812ad4af690c0..562c5faaf5a03c 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-05-19 +date: 2024-05-20 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 51ffdc21ca6952..c550f218f43e87 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-05-19 +date: 2024-05-20 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 de6c3dff7cc41d..75db667e949f44 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 6f4a5c8c830353..e9a6389ff2b3fb 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-05-19 +date: 2024-05-20 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 a0e0361721cc9b..d8e4fcbf3ddde5 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-19 +date: 2024-05-20 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 56a3d30a2399a1..ab9bc1108f5d2a 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 7aa2cf43471d5c..1b3a7c22fecd54 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-05-19 +date: 2024-05-20 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 9120d6ef550769..c572a1ce3de722 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-05-19 +date: 2024-05-20 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 62f2a5cf420ae7..a2e076c65d1fb4 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-05-19 +date: 2024-05-20 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 82027bb97c13b5..e66309cab986be 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 962d6eadf7e41c..35a57a3d6078a0 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-05-19 +date: 2024-05-20 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 723b2110c87c52..63afb89f8fee0f 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-05-19 +date: 2024-05-20 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 cadfae83ce44b3..4ea6135b018d41 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-05-19 +date: 2024-05-20 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 a40fdc36173e0a..5a9ad6150157a4 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 9d762da719987e..8cf96bfc154bd7 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-05-19 +date: 2024-05-20 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 1176b992af69c8..63c046237caf1e 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-05-19 +date: 2024-05-20 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 aaa115c857fc23..ca6f7abd6e5b5b 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-05-19 +date: 2024-05-20 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 140b56a1b81244..f34a671c1a48c1 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-05-19 +date: 2024-05-20 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 0c20eb2ee1ebee..01e8f7843532e0 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 65f940fab32339..745260e4a94f86 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index f219071cc45ec6..d9c17089ddc899 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 5387e0c4a6d846..a5b47a9080ee12 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index d0e70367339b5a..b89a43151117aa 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 63d759740785f1..4b79a918b03e82 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index f0dc1d17095255..d239e446791a43 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-05-19 +date: 2024-05-20 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 63259987693e21..0659128adf42d3 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-05-19 +date: 2024-05-20 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 5e54c4f8a14018..21f93739bcc4ee 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 436a38b79aed29..62a7052d3e1300 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index fd9b47e1500e25..8bc05e22be7ef8 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-05-19 +date: 2024-05-20 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 dda321dc7f6c3e..153598bbb2a55f 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-05-19 +date: 2024-05-20 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 68c2348aa878e2..f819a384e2403d 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d56176b44f7e20..1618dea67537df 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 5a2722733413dd..d265a68b65e4c1 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index b1fb015ce237cf..18f0b044001b16 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-05-19 +date: 2024-05-20 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 b1e14e055d034c..b2fedf50c82d0c 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-05-19 +date: 2024-05-20 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 c00a27ce93691d..6ffe0d1b1930fe 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 71197e7762abef..2fdf7b0760c59e 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d83099d47cc8bd..682990dc1a483a 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-05-19 +date: 2024-05-20 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 f1fb9a6e27226f..6e66f71e5d71b7 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-05-19 +date: 2024-05-20 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 cb6313658a9f0a..32692d3f3b59eb 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-05-19 +date: 2024-05-20 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 aa5c516409f13b..a1c70d25a25279 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-05-19 +date: 2024-05-20 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 0bac0f6f303302..591bb419eef5a7 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-05-19 +date: 2024-05-20 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 cd259aa06c8883..c4ad07d9702e64 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 cfa85dfee4d187..27828e3a97c769 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-05-19 +date: 2024-05-20 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 bede0c2d5371b7..824cd38f2b0b11 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 3f249764ad1ea5..58368a6162f8db 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-05-19 +date: 2024-05-20 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 6907df2fbdcc1a..14c974ba11a34f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 be8adb81dc2b00..87eb0d4ae5c7bf 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-05-19 +date: 2024-05-20 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 9bad59ffae1443..9d8a19a7c71c7a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 34c7b0f4d542de..e48dcb987f647e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-05-19 +date: 2024-05-20 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 0c0d8a3e670752..567f2431b390c5 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 565fab0d664041..8887812c450271 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-05-19 +date: 2024-05-20 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 895df6d8c999ec..b7fd2434c980be 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-05-19 +date: 2024-05-20 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 211c0053aa4054..22946e98f94b9d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 d3a76f0d2d7dc3..3732f6e44771d3 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 9a3af6a5713339..67406176211cda 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-05-19 +date: 2024-05-20 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 9dcf82779521bc..919798b6b1de33 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-05-19 +date: 2024-05-20 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 b5504cd02a4e89..7394c69d76951c 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 88e508d1ff6409..f9d71f1f23424c 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-05-19 +date: 2024-05-20 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 b5e411c077b68a..59886686b30d6a 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-05-19 +date: 2024-05-20 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 7554094acefc87..9def918de0020a 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-05-19 +date: 2024-05-20 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 533bf736ab2833..041e9720f7984b 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-05-19 +date: 2024-05-20 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 9d5edbaf81912d..d6354898109569 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 8385fddc5e8b6b..c92a246c73fd5e 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index cda82d238defd6..37fd11222f5f76 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-05-19 +date: 2024-05-20 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 49e62b7f988278..de52d4d13f3b19 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index c3c88df414d044..a6aeaf2d1ce3c5 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index d7243a2f04157d..dadd3bdcfcf295 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 803e5cdefc1152..01879167d24faa 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 1d9b43d1bb966f..508f27f6014b1e 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index a66dba556de3fe..ac15d2dd748cf6 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-05-19 +date: 2024-05-20 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 afd86816f9ea1d..941fa8455045d5 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-05-19 +date: 2024-05-20 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 485f83f6d1e0a6..fed8552a412dc8 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-05-19 +date: 2024-05-20 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 f634766c24ec4b..f5e5d74c37a4f0 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-05-19 +date: 2024-05-20 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 475c8993b1ff50..3e987fbad81eb7 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 045d543259227c..fde3359592ba7b 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index caa554187564fe..9ef0f4ff4cb606 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-05-19 +date: 2024-05-20 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 25755fb39f63ea..7b652eb750e236 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-05-19 +date: 2024-05-20 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 a352e31a061a5f..0db2cf9271d3de 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 681e22d5ee81dc..cbe053404428e3 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 739a58b8a170c8..1607c7d6d7f03b 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index e2db2a0b5ef135..98bf9927a42a30 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 58463b1cfa14a2..6e28c672fca2af 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 9465ba2bea1a32..fd2243c251a09d 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-05-19 +date: 2024-05-20 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 63992dfca9589f..9cb2ec1eda3677 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-05-19 +date: 2024-05-20 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 7bf310cf38e66e..653baa42b1a7ca 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-05-19 +date: 2024-05-20 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 644f36e6e730cd..b59daa1a3d4ed8 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-05-19 +date: 2024-05-20 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 3ed8016e796227..27f5011c2f8616 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 938a71fa1847b7..b3b3f0aa1b6487 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index fc5e9db79b308b..8072d683064a05 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 7e2c409a12cd02..81be1b3177f531 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 0f105ccd41f01b..63f58848e66ff6 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 2e6a3c6d829294..ac7a20c6b72e6e 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index b043481ac5d69e..db5b8249ff3ed2 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-05-19 +date: 2024-05-20 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 e8906ae9e38808..233ae9ef55e137 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-05-19 +date: 2024-05-20 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 c2d54c203c8168..a762b3b6da30d9 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-05-19 +date: 2024-05-20 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 39b6bc6bf5561e..726214f3a22d9d 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index fad191c0d19b9d..ba5a9aead9745e 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 1608353e8d4671..9f8cd210a3f243 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 5ca8db73845347..a9fb8508b490cb 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 9b6b6cdb44a4de..abc9434abf530a 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index bf0c0bd4b0f806..1fbdf0062a3492 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 80d1579f67eb13..1717c1602ba582 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-05-19 +date: 2024-05-20 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 23b23a2318ca25..36a5c3cfd0e650 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-05-19 +date: 2024-05-20 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 8b8e283efc01de..0aa15b1d04d414 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-05-19 +date: 2024-05-20 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 e39358e10781b8..7f6ae788d2720f 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-05-19 +date: 2024-05-20 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 7e940a43473c80..c3ef45609b022d 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-05-19 +date: 2024-05-20 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 04ac67bfd35f40..df48c59479d8fa 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-05-19 +date: 2024-05-20 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 9bf04639be94f6..1ab460056ad877 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 95865eff03c8a7..2f482f3c45d9f2 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 4e27fa0002d721..99e3028a1874b7 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index bb8e8e6e99a8db..485ce19c77d8a2 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index a08a13d208720d..9e95c7fceecda8 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 01db4df36d530b..f45396785a08f8 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index ddb1cf01667f20..485723b32754f0 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-05-19 +date: 2024-05-20 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 ed68f6d11228fc..2111af1994ea79 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-05-19 +date: 2024-05-20 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 c90b41abfe8f2e..6f79c80cff47a0 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-05-19 +date: 2024-05-20 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 79fadcd61165f5..07755a84b02c0c 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 1b04b40c765d0b..9a9f33206fdf9b 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 35ee1ae7563d34..beaea76c533b78 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 1e4904ddb746e0..2069056f50652b 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index e1d66251e08b7f..61b72c0aa45de4 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-05-19 +date: 2024-05-20 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 8d2f23fdae9611..b2ca9d714ef6b8 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-05-19 +date: 2024-05-20 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 48fb34b31c7a61..cd5e7719b1521a 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-05-19 +date: 2024-05-20 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 76642c8fab63f2..e7e8a84d0999e8 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 2f66f32e470957..2bf4842d3aa9cb 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index fc7e924f3d1bd7..ab929eaca72a72 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index ae00178132f6f9..94e78057415cbc 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 9cd8cc35a2c001..8bbd911ed45034 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 75bb3fc0867abb..b11b636b3daa22 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index bd0fba08d168ce..d39fa52f9d2c2c 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 14479241bd16cb..e7363949fffe83 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index ab36efba51f07f..2f487c61878673 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 4d307bb7c97205..d5a79adc57e037 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 95265f84768819..caeef587b92dd0 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 0d7bf625f420b4..f3994662ff5df6 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index c7f48727018478..5a6ccd7f4b458a 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48217 | 241 | 36797 | 1860 | +| 48219 | 241 | 36798 | 1860 | ## Plugin Directory @@ -275,7 +275,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 47 | 0 | 31 | 3 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 192 | 1 | 126 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 194 | 1 | 127 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index a5a1ef3c39a6a7..8c268e1f95f1b1 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 89bd78d47ffdf1..c3fbeb48c1cb44 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-05-19 +date: 2024-05-20 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 8281864a4030c6..24562df3c52b62 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 50807a531920ec..815446290093b7 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 3c41e009bfa7d2..8a9b064ae4b3ef 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-05-19 +date: 2024-05-20 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 c647b84cdc691f..6640e4af8b91d9 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 8920501487f5cd..7a0c154687213c 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-05-19 +date: 2024-05-20 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 93bb9522695dd5..08ce12e279590e 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-05-19 +date: 2024-05-20 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 096d04a2622932..fa58345d738cae 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-05-19 +date: 2024-05-20 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 1a625fec67d1e1..2bec6748e53cd1 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-05-19 +date: 2024-05-20 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 79756d82cc5107..5daf9853f828f8 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-05-19 +date: 2024-05-20 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 c94687940c5f5c..e228ca41219025 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-05-19 +date: 2024-05-20 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 d9f548b20d3845..e97860955ca84c 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-05-19 +date: 2024-05-20 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 8190123d52b878..0d574769a21cd5 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-05-19 +date: 2024-05-20 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 afa85cb2d4a299..16bc7de0b56884 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-05-19 +date: 2024-05-20 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 1d19bfc48fcbf4..2e07d5a49f159b 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-05-19 +date: 2024-05-20 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 44b7aa790537a3..ae5c74157c1ba3 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index f2cf608a087004..9a37ce5bc337bc 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 9a8d3a8a2a3be9..4613c7395bbdcd 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 58ad8429098ec3..018d2605b2f76a 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index c0a611852f790d..493597afeb4da4 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index bdcd3720b49b2c..27007122fc6d88 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-05-19 +date: 2024-05-20 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 d332e7135d2bd4..811a8cda4699fe 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-05-19 +date: 2024-05-20 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 4ab64f5d4b4399..cc23b3a3c1587e 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-05-19 +date: 2024-05-20 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 3f86355c0181f8..c0af522c9791d2 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-05-19 +date: 2024-05-20 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 8d3db52c94b8c9..d81adb6537e73d 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-05-19 +date: 2024-05-20 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 7c794eab3226c3..61c74b672b4e70 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-05-19 +date: 2024-05-20 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 4de1d699699c83..ea83468fcd1d3d 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-05-19 +date: 2024-05-20 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 e7b076bab3b75e..8e94973d5c3492 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 1464cb4466f734..7ef4a611abcf81 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index ba2d7f69053f96..0ea1d3172dd3be 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-05-19 +date: 2024-05-20 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 3534c2fc00e941..087542719d1e47 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-05-19 +date: 2024-05-20 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 dcd724bad4b942..1a2bbb0524a15f 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-05-19 +date: 2024-05-20 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 9bfd14184f79ed..33fc2ffd33a4e3 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-05-19 +date: 2024-05-20 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 b8c003ebac32a1..6e2fc9a19eaf83 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-05-19 +date: 2024-05-20 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 c868fb33c47653..79de411a6e575f 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-05-19 +date: 2024-05-20 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 4b867d907c5d8a..95d3eec19eba47 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-05-19 +date: 2024-05-20 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 3a8bf21c230571..ec85be98e62b7a 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-05-19 +date: 2024-05-20 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 92ec6c14a71b6e..6531727d0d0fcc 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-05-19 +date: 2024-05-20 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 1acc5dccfd1628..e5df0709fea7de 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-19 +date: 2024-05-20 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 60e04eaee98f0e..8a58fa683984b5 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-05-19 +date: 2024-05-20 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 73b0519041fd6a..207e867788d386 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-05-19 +date: 2024-05-20 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 cd4b26b47b6be1..77864ff7ffdb3c 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-05-19 +date: 2024-05-20 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 8927754bca3570..ecceb395dcf5d1 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-05-19 +date: 2024-05-20 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 90861cf8e0c495..b561d2da43a8e8 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-05-19 +date: 2024-05-20 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 0cce910bd43260..7522b26b6f3f51 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 04678d02029adb..c1f174a432bb27 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 2c12ca994bc697..074ba92429cbee 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-05-19 +date: 2024-05-20 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 0f27b3e7ca06ee..0ef774e7bf6be9 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-05-19 +date: 2024-05-20 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 afd5c2fb162af9..b79b3c80e18e62 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index adc1cbc8572dad..db3a5756af1391 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index ff1e94f3e98423..d7b26a682cb271 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-05-19 +date: 2024-05-20 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 3e59a5a4c195db..e741e98b12d204 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-05-19 +date: 2024-05-20 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 0ffb2adb081355..5bca97e8999539 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-05-19 +date: 2024-05-20 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 95dc28dfcdaaef..193e96d59bb23e 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-05-19 +date: 2024-05-20 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 6bb855298ecc20..7d5ef7ea92dff4 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-05-19 +date: 2024-05-20 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 e3283711d998d4..dab12777092443 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-05-19 +date: 2024-05-20 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 f6388d34617809..496bb0951f15cf 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-05-19 +date: 2024-05-20 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 135ee33ffb808b..9bb57b81870b07 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-05-19 +date: 2024-05-20 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 04e4f1b4e32313..0607b3fbe497e6 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-05-19 +date: 2024-05-20 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 7e28920eb6f3b1..0ff4a1b9f893a0 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-05-19 +date: 2024-05-20 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 2d2a446c88567a..ebc6df00a27985 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-05-19 +date: 2024-05-20 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 9b2d68dd8f9629..be3ee2bb95a9b4 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-05-19 +date: 2024-05-20 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 da1cd57bdd9556..b120e745b9875a 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index e49c8ad046c9ae..4c015585d1a70f 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-05-19 +date: 2024-05-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 8b7fa0d3f8be933ea391ba4b2a862d4276dca9f1 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 20 May 2024 11:49:22 +0200 Subject: [PATCH 13/97] [SLO] Synthetics based SLO e2e tests (#183637) ## Summary Setting up Elastic/Synthetics based slo e2e tests !! --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/ftr_configs.yml | 1 + .../pipelines/pull_request/slo_plugin_e2e.yml | 17 ++++ .../pipelines/pull_request/pipeline.ts | 4 + .../steps/functional/slo_plugin_e2e.sh | 16 ++++ x-pack/packages/kbn-data-forge/index.ts | 1 + x-pack/packages/kbn-data-forge/src/cli.ts | 5 +- .../packages/kbn-data-forge/src/constants.ts | 2 +- .../src/lib/cli_to_partial_config.ts | 2 +- .../kbn-data-forge/src/lib/create_config.ts | 2 +- .../kbn-data-forge/src/lib/index_schedule.ts | 2 +- .../kbn-data-forge/src/types/index.ts | 5 +- .../slo/e2e/journeys/index.ts | 8 ++ .../slo/e2e/journeys/slos_overview.journey.ts | 50 ++++++++++ .../slo/e2e/page_objects/slo_app.tsx | 33 +++++++ .../slo/e2e/services/slo_data_service.ts | 94 +++++++++++++++++++ .../slo/e2e/synthetics_run.ts | 35 +++++++ .../slo/e2e/tsconfig.json | 18 ++++ .../components/card_view/slo_card_item.tsx | 1 + .../observability_solution/slo/scripts/e2e.js | 13 +++ .../e2e/helpers/synthetics_runner.ts | 6 +- .../synthetics/e2e/index.ts | 11 +++ 21 files changed, 317 insertions(+), 9 deletions(-) create mode 100644 .buildkite/pipelines/pull_request/slo_plugin_e2e.yml create mode 100755 .buildkite/scripts/steps/functional/slo_plugin_e2e.sh create mode 100644 x-pack/plugins/observability_solution/slo/e2e/journeys/index.ts create mode 100644 x-pack/plugins/observability_solution/slo/e2e/journeys/slos_overview.journey.ts create mode 100644 x-pack/plugins/observability_solution/slo/e2e/page_objects/slo_app.tsx create mode 100644 x-pack/plugins/observability_solution/slo/e2e/services/slo_data_service.ts create mode 100644 x-pack/plugins/observability_solution/slo/e2e/synthetics_run.ts create mode 100644 x-pack/plugins/observability_solution/slo/e2e/tsconfig.json create mode 100644 x-pack/plugins/observability_solution/slo/scripts/e2e.js create mode 100644 x-pack/plugins/observability_solution/synthetics/e2e/index.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 5b1734613c0f60..9a73a5a00e8d62 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -63,6 +63,7 @@ disabled: - x-pack/plugins/observability_solution/synthetics/e2e/synthetics/synthetics_run.ts - x-pack/plugins/observability_solution/exploratory_view/e2e/synthetics_run.ts - x-pack/plugins/observability_solution/ux/e2e/synthetics_run.ts + - x-pack/plugins/observability_solution/slo/e2e/synthetics_run.ts # Configs that exist but weren't running in CI when this file was introduced - x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts diff --git a/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml b/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml new file mode 100644 index 00000000000000..83332811bcc201 --- /dev/null +++ b/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml @@ -0,0 +1,17 @@ +steps: + - command: .buildkite/scripts/steps/functional/slo_plugin_e2e.sh + label: 'SLO Plugin @elastic/synthetics Tests' + agents: + queue: n2-4-spot + depends_on: + - build + - quick_checks + timeout_in_minutes: 30 + artifact_paths: + - 'x-pack/plugins/observability_solution/slo/e2e/.journeys/**/*' + retry: + automatic: + - exit_status: '-1' + limit: 3 + - exit_status: '*' + limit: 1 diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 13b89678ccac65..db0e8239d97016 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -139,6 +139,10 @@ const uploadPipeline = (pipelineContent: string | object) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ux_plugin_e2e.yml')); } + if (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution/])) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/slo_plugin_e2e.yml')); + } + if ( GITHUB_PR_LABELS.includes('ci:deploy-cloud') || GITHUB_PR_LABELS.includes('ci:cloud-deploy') || diff --git a/.buildkite/scripts/steps/functional/slo_plugin_e2e.sh b/.buildkite/scripts/steps/functional/slo_plugin_e2e.sh new file mode 100755 index 00000000000000..95007fbff85bfd --- /dev/null +++ b/.buildkite/scripts/steps/functional/slo_plugin_e2e.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/common/util.sh + +.buildkite/scripts/bootstrap.sh +.buildkite/scripts/download_build_artifacts.sh + +export JOB=kibana-ux-plugin-synthetics + +echo "--- SLO @elastic/synthetics Tests" + +cd "$XPACK_DIR" + +node plugins/observability_solution/slo/scripts/e2e.js --kibana-install-dir "$KIBANA_BUILD_LOCATION" ${GREP:+--grep \"${GREP}\"} diff --git a/x-pack/packages/kbn-data-forge/index.ts b/x-pack/packages/kbn-data-forge/index.ts index bb9d0e104f4a7e..056c63e9964a66 100644 --- a/x-pack/packages/kbn-data-forge/index.ts +++ b/x-pack/packages/kbn-data-forge/index.ts @@ -19,3 +19,4 @@ export { cli } from './src/cli'; export { generate } from './src/generate'; export { cleanup } from './src/cleanup'; export { createConfig, readConfig } from './src/lib/create_config'; +export { DEFAULTS } from './src/constants'; diff --git a/x-pack/packages/kbn-data-forge/src/cli.ts b/x-pack/packages/kbn-data-forge/src/cli.ts index 9d7e9e3bca0261..88a8aad6bce8d4 100644 --- a/x-pack/packages/kbn-data-forge/src/cli.ts +++ b/x-pack/packages/kbn-data-forge/src/cli.ts @@ -6,14 +6,15 @@ */ import { ToolingLog } from '@kbn/tooling-log'; +import { CliOptions } from './types'; import { cliOptionsToPartialConfig } from './lib/cli_to_partial_config'; import { createConfig, readConfig } from './lib/create_config'; import { getEsClient } from './lib/get_es_client'; import { parseCliOptions } from './lib/parse_cli_options'; import { run } from './run'; -export async function cli() { - const options = parseCliOptions(); +export async function cli(cliOptions?: CliOptions) { + const options = cliOptions ?? parseCliOptions(); const partialConfig = options.config ? await readConfig(options.config) : cliOptionsToPartialConfig(options); diff --git a/x-pack/packages/kbn-data-forge/src/constants.ts b/x-pack/packages/kbn-data-forge/src/constants.ts index 0b5ab1978d9832..afcc715916ab50 100644 --- a/x-pack/packages/kbn-data-forge/src/constants.ts +++ b/x-pack/packages/kbn-data-forge/src/constants.ts @@ -34,5 +34,5 @@ export const DEFAULTS = { EVENT_TEMPLATE: 'good', REDUCE_WEEKEND_TRAFFIC_BY: 0, EPHEMERAL_PROJECT_IDS: 0, - ALIGN_EVENTS_TO_INTERVAL: 0, + ALIGN_EVENTS_TO_INTERVAL: true, }; diff --git a/x-pack/packages/kbn-data-forge/src/lib/cli_to_partial_config.ts b/x-pack/packages/kbn-data-forge/src/lib/cli_to_partial_config.ts index b116f262303db3..5d7d10d787bdc6 100644 --- a/x-pack/packages/kbn-data-forge/src/lib/cli_to_partial_config.ts +++ b/x-pack/packages/kbn-data-forge/src/lib/cli_to_partial_config.ts @@ -14,7 +14,7 @@ export function cliOptionsToPartialConfig(options: CliOptions) { const schedule: Schedule = { template: options.eventTemplate, start: options.lookback, - end: false, + end: options.scheduleEnd ?? false, }; const decodedDataset = DatasetRT.decode(options.dataset); diff --git a/x-pack/packages/kbn-data-forge/src/lib/create_config.ts b/x-pack/packages/kbn-data-forge/src/lib/create_config.ts index c8a48b26329984..56b59b7d01365f 100644 --- a/x-pack/packages/kbn-data-forge/src/lib/create_config.ts +++ b/x-pack/packages/kbn-data-forge/src/lib/create_config.ts @@ -62,7 +62,7 @@ export function createConfig(partialConfig: PartialConfig = {}) { concurrency: DEFAULTS.CONCURRENCY, reduceWeekendTrafficBy: DEFAULTS.REDUCE_WEEKEND_TRAFFIC_BY, ephemeralProjectIds: DEFAULTS.EPHEMERAL_PROJECT_IDS, - alignEventsToInterval: DEFAULTS.ALIGN_EVENTS_TO_INTERVAL === 1, + alignEventsToInterval: DEFAULTS.ALIGN_EVENTS_TO_INTERVAL, ...(partialConfig.indexing ?? {}), }, schedule: partialConfig.schedule ?? [schedule], diff --git a/x-pack/packages/kbn-data-forge/src/lib/index_schedule.ts b/x-pack/packages/kbn-data-forge/src/lib/index_schedule.ts index 916efe551dfc49..a18ce031c19a1a 100644 --- a/x-pack/packages/kbn-data-forge/src/lib/index_schedule.ts +++ b/x-pack/packages/kbn-data-forge/src/lib/index_schedule.ts @@ -52,7 +52,7 @@ export async function indexSchedule(config: Config, client: Client, logger: Tool logger.info( `Indexing "${schedule.template}" events from ${startTs.toISOString()} to ${ - end === false ? 'indefinatly' : end.toISOString() + end === false ? 'indefinitely' : end.toISOString() }` ); await createEvents( diff --git a/x-pack/packages/kbn-data-forge/src/types/index.ts b/x-pack/packages/kbn-data-forge/src/types/index.ts index b84805d8ecb93b..ac445478329c2d 100644 --- a/x-pack/packages/kbn-data-forge/src/types/index.ts +++ b/x-pack/packages/kbn-data-forge/src/types/index.ts @@ -159,7 +159,7 @@ export interface Point { } export interface CliOptions { - config: string; + config?: string; lookback: string; eventsPerCycle: number; payloadSize: number; @@ -170,7 +170,7 @@ export interface CliOptions { elasticsearchHost: string; elasticsearchUsername: string; elasticsearchPassword: string; - elasticsearchApiKey: undefined | string; + elasticsearchApiKey?: undefined | string; kibanaUrl: string; kibanaUsername: string; kibanaPassword: string; @@ -179,4 +179,5 @@ export interface CliOptions { reduceWeekendTrafficBy: number; ephemeralProjectIds: number; alignEventsToInterval: boolean; + scheduleEnd?: string; } diff --git a/x-pack/plugins/observability_solution/slo/e2e/journeys/index.ts b/x-pack/plugins/observability_solution/slo/e2e/journeys/index.ts new file mode 100644 index 00000000000000..c8a63354ad35d2 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/journeys/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './slos_overview.journey'; diff --git a/x-pack/plugins/observability_solution/slo/e2e/journeys/slos_overview.journey.ts b/x-pack/plugins/observability_solution/slo/e2e/journeys/slos_overview.journey.ts new file mode 100644 index 00000000000000..da83a88ac02d29 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/journeys/slos_overview.journey.ts @@ -0,0 +1,50 @@ +/* + * 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 { journey, step, before, expect } from '@elastic/synthetics'; +import { RetryService } from '@kbn/ftr-common-functional-services'; +import { SLoDataService } from '../services/slo_data_service'; +import { sloAppPageProvider } from '../page_objects/slo_app'; + +journey(`SLOsOverview`, async ({ page, params }) => { + const sloApp = sloAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); + const dataService = new SLoDataService({ + kibanaUrl: params.kibanaUrl, + elasticsearchUrl: params.elasticsearchUrl, + getService: params.getService, + }); + + const retry: RetryService = params.getService('retry'); + + before(async () => { + await dataService.generateSloData(); + await dataService.addSLO(); + }); + + step('Go to slos overview', async () => { + await sloApp.navigateToOverview(true); + }); + + step('validate data retention tab', async () => { + await retry.tryWithRetries( + 'check if slos are displayed', + async () => { + await page.waitForSelector('text="Test Stack SLO"'); + const cards = await page.locator('text="Test Stack SLO"').all(); + expect(cards.length > 5).toBeTruthy(); + }, + { + retryCount: 50, + retryDelay: 20000, + timeout: 60 * 20000, + }, + async () => { + await page.getByTestId('querySubmitButton').click(); + } + ); + }); +}); diff --git a/x-pack/plugins/observability_solution/slo/e2e/page_objects/slo_app.tsx b/x-pack/plugins/observability_solution/slo/e2e/page_objects/slo_app.tsx new file mode 100644 index 00000000000000..09d3470bea7753 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/page_objects/slo_app.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Page } from '@elastic/synthetics'; +import { loginPageProvider } from '@kbn/synthetics-plugin/e2e/page_objects/login'; +import { utilsPageProvider } from '@kbn/synthetics-plugin/e2e/page_objects/utils'; +import { recordVideo } from '@kbn/synthetics-plugin/e2e/helpers/record_video'; + +export function sloAppPageProvider({ page, kibanaUrl }: { page: Page; kibanaUrl: string }) { + page.setDefaultTimeout(60 * 1000); + recordVideo(page); + + return { + ...loginPageProvider({ + page, + username: 'elastic', + password: 'changeme', + }), + ...utilsPageProvider({ page }), + + async navigateToOverview(doLogin = false) { + await page.goto(`${kibanaUrl}/app/slo`, { + waitUntil: 'networkidle', + }); + if (doLogin) { + await this.loginToKibana(); + } + }, + }; +} diff --git a/x-pack/plugins/observability_solution/slo/e2e/services/slo_data_service.ts b/x-pack/plugins/observability_solution/slo/e2e/services/slo_data_service.ts new file mode 100644 index 00000000000000..a6f30e24e17717 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/services/slo_data_service.ts @@ -0,0 +1,94 @@ +/* + * 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 { KbnClient } from '@kbn/test'; +import { cli, DEFAULTS } from '@kbn/data-forge'; + +export class SLoDataService { + kibanaUrl: string; + elasticsearchUrl: string; + params: Record; + requester: KbnClient['requester']; + + constructor(params: Record) { + this.kibanaUrl = params.kibanaUrl; + this.elasticsearchUrl = params.elasticsearchUrl; + this.requester = params.getService('kibanaServer').requester; + this.params = params; + } + + async generateSloData({ + lookback = 'now-1d', + eventsPerCycle = 50, + }: { + lookback?: string; + eventsPerCycle?: number; + } = {}) { + await cli({ + kibanaUrl: this.kibanaUrl, + elasticsearchHost: this.elasticsearchUrl, + lookback: DEFAULTS.LOOKBACK, + eventsPerCycle: DEFAULTS.EVENTS_PER_CYCLE, + payloadSize: DEFAULTS.PAYLOAD_SIZE, + concurrency: DEFAULTS.CONCURRENCY, + indexInterval: 10_000, + dataset: 'fake_stack', + scenario: DEFAULTS.SCENARIO, + elasticsearchUsername: DEFAULTS.ELASTICSEARCH_USERNAME, + elasticsearchPassword: DEFAULTS.ELASTICSEARCH_PASSWORD, + kibanaUsername: DEFAULTS.KIBANA_USERNAME, + kibanaPassword: DEFAULTS.KIBANA_PASSWORD, + installKibanaAssets: true, + eventTemplate: DEFAULTS.EVENT_TEMPLATE, + reduceWeekendTrafficBy: DEFAULTS.REDUCE_WEEKEND_TRAFFIC_BY, + ephemeralProjectIds: DEFAULTS.EPHEMERAL_PROJECT_IDS, + alignEventsToInterval: DEFAULTS.ALIGN_EVENTS_TO_INTERVAL, + scheduleEnd: 'now+10m', + }).then((res) => { + // eslint-disable-next-line no-console + console.log(res); + }); + } + + async addSLO() { + const example = { + name: 'Test Stack SLO', + description: '', + indicator: { + type: 'sli.kql.custom', + params: { + index: 'kbn-data-forge-fake_stack.admin-console-*', + filter: '', + good: 'log.level : "INFO" ', + total: '', + timestampField: '@timestamp', + }, + }, + budgetingMethod: 'occurrences', + timeWindow: { + duration: '30d', + type: 'rolling', + }, + objective: { + target: 0.99, + }, + tags: [], + groupBy: ['user.id'], + }; + try { + const { data } = await this.requester.request({ + description: 'get monitor by id', + path: '/api/observability/slos', + body: example, + method: 'POST', + }); + return data; + } catch (e) { + console.error(e); + } + } +} diff --git a/x-pack/plugins/observability_solution/slo/e2e/synthetics_run.ts b/x-pack/plugins/observability_solution/slo/e2e/synthetics_run.ts new file mode 100644 index 00000000000000..d8a4946cfc447b --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/synthetics_run.ts @@ -0,0 +1,35 @@ +/* + * 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 { FtrConfigProviderContext } from '@kbn/test'; +import { SyntheticsRunner, argv } from '@kbn/synthetics-plugin/e2e'; + +const { headless, grep, bail: pauseOnError } = argv; + +async function runE2ETests({ readConfigFile }: FtrConfigProviderContext) { + const kibanaConfig = await readConfigFile(require.resolve('@kbn/synthetics-plugin/e2e/config')); + return { + ...kibanaConfig.getAll(), + testRunner: async ({ getService }: any) => { + const syntheticsRunner = new SyntheticsRunner(getService, { + headless, + match: grep, + pauseOnError, + }); + + await syntheticsRunner.setup(); + + await syntheticsRunner.loadTestFiles(async () => { + require('./journeys'); + }); + + await syntheticsRunner.run(); + }, + }; +} + +// eslint-disable-next-line import/no-default-export +export default runE2ETests; diff --git a/x-pack/plugins/observability_solution/slo/e2e/tsconfig.json b/x-pack/plugins/observability_solution/slo/e2e/tsconfig.json new file mode 100644 index 00000000000000..46ac09ac5a0d5f --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/e2e/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "exclude": ["tmp", "target/**/*"], + "include": ["**/*"], + "compilerOptions": { + "outDir": "target/types", + "types": [ "node"], + "isolatedModules": false, + }, + "kbn_references": [ + { "path": "../../../../test/tsconfig.json" }, + { "path": "../../../../../test/tsconfig.json" }, + "@kbn/test", + "@kbn/ftr-common-functional-services", + "@kbn/synthetics-plugin/e2e", + "@kbn/data-forge", + ] +} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx index deb2a1b880ad71..ebdc068435a766 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx @@ -108,6 +108,7 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, refet return ( <> } onMouseOver={() => { if (!isMouseOver) { diff --git a/x-pack/plugins/observability_solution/slo/scripts/e2e.js b/x-pack/plugins/observability_solution/slo/scripts/e2e.js new file mode 100644 index 00000000000000..3fe4979236fb1b --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/scripts/e2e.js @@ -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. + */ + +/* eslint-disable no-console */ +const { executeSyntheticsRunner } = require('@kbn/synthetics-plugin/scripts/base_e2e'); +const path = require('path'); + +const e2eDir = path.join(__dirname, '../e2e'); +executeSyntheticsRunner(e2eDir); diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/helpers/synthetics_runner.ts b/x-pack/plugins/observability_solution/synthetics/e2e/helpers/synthetics_runner.ts index 97e0fe72d81d6c..11c71943c47103 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/helpers/synthetics_runner.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/helpers/synthetics_runner.ts @@ -112,7 +112,11 @@ export class SyntheticsRunner { let results: PromiseType> = {}; for (let i = 0; i < noOfRuns; i++) { results = await syntheticsRun({ - params: { kibanaUrl: this.kibanaUrl, getService: this.getService }, + params: { + kibanaUrl: this.kibanaUrl, + getService: this.getService, + elasticsearchUrl: this.elasticsearchUrl, + }, playwrightOptions: { headless: headless ?? !CI, testIdAttribute: 'data-test-subj', diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/index.ts b/x-pack/plugins/observability_solution/synthetics/e2e/index.ts new file mode 100644 index 00000000000000..f0e9b5e8b760c6 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/e2e/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { SyntheticsRunner } from './helpers/synthetics_runner'; +export { argv } from './helpers/parse_args_params'; +export { loginPageProvider } from './page_objects/login'; +export { utilsPageProvider } from './page_objects/utils'; From 6e6b99c4bb93feeebf4275075167abfbc0a6b39f Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Mon, 20 May 2024 12:16:39 +0100 Subject: [PATCH 14/97] [Security Solution][Detection Engine] adds alert suppression to ES|QL rule type (#180927) ## Summary - addresses https://github.com/elastic/security-team/issues/9203 - adds alert suppression for new terms rule type - similarly to [custom investigation fields](https://github.com/elastic/kibana/pull/177746) list of available suppression fields: - shows only ES|QL fields returned in query for aggregating queries - shows ES|QL fields returned in query + index fields for non-aggregating queries. Since resulted alerts for this type of query, are enriched with source documents. ### Demo 1. run esql rule w/o suppression 2. run esql rule w/ suppression per rule execution. Since ES|QL query is aggregating, no alerts suppressed on already agrregated field `host.ip` 3. run suppression on interval 20m 4. run suppression for custom ES|QL field which is the same as `host.ip`, hence same results 5. run suppression on interval 100m https://github.com/elastic/kibana/assets/92328789/4bd8cf13-6e23-4842-b775-605c74ae0127 ### Limitations Since suppressed alerts deduplication relies on alert timestamps, sorting of results other than `@timestamp asc` in ES|QL query may impact on number of suppressed alerts, when number of possible alerts more than max_signals. This affects only non-aggregating queries, since suppression boundaries for these alerts set as rule execution time ### Checklist - [x] Functional changes are hidden behind a feature flag Feature flag `alertSuppressionForEsqlRuleEnabled` - [x] Functional changes are covered with a test plan and automated tests. - https://github.com/elastic/security-team/pull/9389 - [x] Stability of new and changed tests is verified using the [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner). - FTR(x100): https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5907 - Cypress(x100): https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6011 - [x] Comprehensive manual testing is done by two engineers: the PR author and one of the PR reviewers. Changes are tested in both ESS and Serverless. - [x] Mapping changes are accompanied by a technical design document. It can be a GitHub issue or an RFC explaining the changes. The design document is shared with and approved by the appropriate teams and individual stakeholders. Existing AlertSuppression schema field is used for ES|QL rule, the one that already used for Query, New terms and IM rules. ```yml alert_suppression: $ref: './common_attributes.schema.yaml#/components/schemas/AlertSuppression' ``` where ```yml AlertSuppression: type: object properties: group_by: $ref: '#/components/schemas/AlertSuppressionGroupBy' duration: $ref: '#/components/schemas/AlertSuppressionDuration' missing_fields_strategy: $ref: '#/components/schemas/AlertSuppressionMissingFieldsStrategy' required: - group_by ``` - [x] Functional changes are communicated to the Docs team. A ticket or PR is opened in https://github.com/elastic/security-docs. The following information is included: any feature flags used, affected environments (Serverless, ESS, or both). - https://github.com/elastic/security-docs/issues/5156 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Nikita Indik --- .../get_index_list_from_esql_query.test.ts | 5 + .../esql/get_index_list_from_esql_query.ts | 8 +- .../rule_schema/rule_request_schema.test.ts | 1 + .../model/rule_schema/rule_schemas.gen.ts | 11 +- .../rule_schema/rule_schemas.schema.yaml | 9 + .../common/detection_engine/constants.ts | 1 + .../common/detection_engine/utils.test.ts | 8 +- .../common/experimental_features.ts | 5 + .../installation_and_upgrade.md | 3 + .../logic/esql_validator.test.ts | 42 +- .../rule_creation/logic/esql_validator.ts | 29 +- .../description_step/index.test.tsx | 2 +- .../components/step_about_rule/index.tsx | 11 +- .../components/step_define_rule/index.tsx | 22 +- ...e_experimental_feature_fields_transform.ts | 29 +- .../rule_creation_ui/hooks/index.tsx | 1 + ...st.ts => use_all_esql_rule_fields.test.ts} | 113 +- .../hooks/use_all_esql_rule_fields.ts | 118 + .../hooks/use_investigation_fields.ts | 92 - .../pages/rule_creation/helpers.ts | 1 + .../logic/use_alert_suppression.test.tsx | 15 + .../logic/use_alert_suppression.tsx | 11 +- .../components/alerts_table/actions.tsx | 15 +- .../normalization/rule_converters.test.ts | 22 + .../normalization/rule_converters.ts | 4 + .../rule_schema/model/rule_schemas.mock.ts | 11 + .../rule_schema/model/rule_schemas.ts | 1 + .../rule_types/esql/create_esql_alert_type.ts | 4 +- .../detection_engine/rule_types/esql/esql.ts | 141 +- .../esql/utils/generate_alert_id.test.ts | 156 ++ .../esql/utils/generate_alert_id.ts | 57 + .../rule_types/esql/utils/index.ts | 1 + .../rule_types/esql/wrap_esql_alerts.test.ts | 94 + .../rule_types/esql/wrap_esql_alerts.ts | 47 +- .../esql/wrap_suppressed_esql_alerts.test.ts | 151 ++ .../esql/wrap_suppressed_esql_alerts.ts | 111 + ...bulk_create_suppressed_alerts_in_memory.ts | 2 +- ...bulk_create_suppressed_alerts_in_memory.ts | 13 +- .../partition_missing_fields_events.test.ts | 40 +- .../utils/partition_missing_fields_events.ts | 15 +- .../rule_types/utils/suppression_utils.ts | 5 +- .../config/ess/config.base.ts | 1 + .../configs/serverless.config.ts | 1 + .../execution_logic/esql_suppression.ts | 2025 +++++++++++++++++ .../execution_logic/index.ts | 1 + .../test/security_solution_cypress/config.ts | 1 + ...ws_suppression_serverless_essentials.cy.ts | 11 + .../common_flows_supression_ess_basic.cy.ts | 4 + .../rule_creation/esql_rule.cy.ts | 292 +++ .../rule_creation/esql_rule_ess.cy.ts | 219 -- .../rule_edit/esql_rule.cy.ts | 239 +- .../prebuilt_rules_preview.cy.ts | 66 +- .../cypress/objects/rule.ts | 2 +- .../cypress/tasks/create_new_rule.ts | 33 +- .../serverless_config.ts | 1 + 55 files changed, 3758 insertions(+), 565 deletions(-) rename x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/{use_investigation_fields.test.ts => use_all_esql_rule_fields.test.ts} (50%) create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.ts delete mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.test.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.test.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.test.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts create mode 100644 x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/esql_suppression.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule.cy.ts delete mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule_ess.cy.ts diff --git a/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.test.ts b/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.test.ts index ece5c72d5d5ffe..5965e51e694e35 100644 --- a/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.test.ts +++ b/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.test.ts @@ -33,4 +33,9 @@ describe('getIndexListFromEsqlQuery', () => { getIndexPatternFromESQLQueryMock.mockReturnValue('test-1 , test-2 '); expect(getIndexListFromEsqlQuery('From test-1, test-2 ')).toEqual(['test-1', 'test-2']); }); + + it('should return empty array when getIndexPatternFromESQLQuery throws error', () => { + getIndexPatternFromESQLQueryMock.mockReturnValue(new Error('Fail to parse')); + expect(getIndexListFromEsqlQuery('From test-1 []')).toEqual([]); + }); }); diff --git a/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.ts b/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.ts index 64374732dc7162..9464f041bdd643 100644 --- a/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.ts +++ b/packages/kbn-securitysolution-utils/src/esql/get_index_list_from_esql_query.ts @@ -11,9 +11,13 @@ import { getIndexPatternFromESQLQuery } from '@kbn/esql-utils'; * parses ES|QL query and returns array of indices */ export const getIndexListFromEsqlQuery = (query: string | undefined): string[] => { - const indexString = getIndexPatternFromESQLQuery(query); + try { + const indexString = getIndexPatternFromESQLQuery(query); - return getIndexListFromIndexString(indexString); + return getIndexListFromIndexString(indexString); + } catch (e) { + return []; + } }; /** diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_request_schema.test.ts b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_request_schema.test.ts index 0b89cbdc728898..b7435c7dd86e87 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_request_schema.test.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_request_schema.test.ts @@ -1267,6 +1267,7 @@ describe('rules schema', () => { // behaviour common for multiple rule types const cases = [ { ruleType: 'threat_match', ruleMock: getCreateThreatMatchRulesSchemaMock() }, + { ruleType: 'esql', ruleMock: getCreateEsqlRulesSchemaMock() }, { ruleType: 'query', ruleMock: getCreateRulesSchemaMock() }, { ruleType: 'saved_query', ruleMock: getCreateSavedQueryRulesSchemaMock() }, { ruleType: 'eql', ruleMock: getCreateEqlRuleSchemaMock() }, diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.gen.ts index d2523a9a5c5575..278b4679cd93e9 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.gen.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.gen.ts @@ -560,14 +560,19 @@ export const EsqlRuleRequiredFields = z.object({ query: RuleQuery, }); +export type EsqlRuleOptionalFields = z.infer; +export const EsqlRuleOptionalFields = z.object({ + alert_suppression: AlertSuppression.optional(), +}); + export type EsqlRulePatchFields = z.infer; -export const EsqlRulePatchFields = EsqlRuleRequiredFields.partial(); +export const EsqlRulePatchFields = EsqlRuleOptionalFields.merge(EsqlRuleRequiredFields.partial()); export type EsqlRuleResponseFields = z.infer; -export const EsqlRuleResponseFields = EsqlRuleRequiredFields; +export const EsqlRuleResponseFields = EsqlRuleOptionalFields.merge(EsqlRuleRequiredFields); export type EsqlRuleCreateFields = z.infer; -export const EsqlRuleCreateFields = EsqlRuleRequiredFields; +export const EsqlRuleCreateFields = EsqlRuleOptionalFields.merge(EsqlRuleRequiredFields); export type EsqlRule = z.infer; export const EsqlRule = SharedResponseProps.merge(EsqlRuleResponseFields); diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml index ae1a5657d2ab47..de424af505c1f5 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml @@ -826,17 +826,26 @@ components: - language - query + EsqlRuleOptionalFields: + type: object + properties: + alert_suppression: + $ref: './common_attributes.schema.yaml#/components/schemas/AlertSuppression' + EsqlRulePatchFields: allOf: + - $ref: '#/components/schemas/EsqlRuleOptionalFields' - $ref: '#/components/schemas/EsqlRuleRequiredFields' x-modify: partial EsqlRuleResponseFields: allOf: + - $ref: '#/components/schemas/EsqlRuleOptionalFields' - $ref: '#/components/schemas/EsqlRuleRequiredFields' EsqlRuleCreateFields: allOf: + - $ref: '#/components/schemas/EsqlRuleOptionalFields' - $ref: '#/components/schemas/EsqlRuleRequiredFields' EsqlRule: diff --git a/x-pack/plugins/security_solution/common/detection_engine/constants.ts b/x-pack/plugins/security_solution/common/detection_engine/constants.ts index b3bc1f434ff513..54c81cf93568f9 100644 --- a/x-pack/plugins/security_solution/common/detection_engine/constants.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/constants.ts @@ -41,6 +41,7 @@ export const MINIMUM_LICENSE_FOR_SUPPRESSION = 'platinum' as const; export const SUPPRESSIBLE_ALERT_RULES: Type[] = [ 'threshold', + 'esql', 'saved_query', 'query', 'new_terms', diff --git a/x-pack/plugins/security_solution/common/detection_engine/utils.test.ts b/x-pack/plugins/security_solution/common/detection_engine/utils.test.ts index e0c76253c416ab..2e5ac39936fa37 100644 --- a/x-pack/plugins/security_solution/common/detection_engine/utils.test.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/utils.test.ts @@ -229,6 +229,7 @@ describe('Alert Suppression Rules', () => { describe('isSuppressibleAlertRule', () => { test('should return true for a suppressible rule type', () => { // Rule types that support alert suppression: + expect(isSuppressibleAlertRule('esql')).toBe(true); expect(isSuppressibleAlertRule('threshold')).toBe(true); expect(isSuppressibleAlertRule('saved_query')).toBe(true); expect(isSuppressibleAlertRule('query')).toBe(true); @@ -238,7 +239,6 @@ describe('Alert Suppression Rules', () => { // Rule types that don't support alert suppression: expect(isSuppressibleAlertRule('machine_learning')).toBe(false); - expect(isSuppressibleAlertRule('esql')).toBe(false); }); test('should return false for an unknown rule type', () => { @@ -266,6 +266,7 @@ describe('Alert Suppression Rules', () => { describe('isSuppressionRuleConfiguredWithDuration', () => { test('should return true for a suppressible rule type', () => { // Rule types that support alert suppression: + expect(isSuppressionRuleConfiguredWithDuration('esql')).toBe(true); expect(isSuppressionRuleConfiguredWithDuration('threshold')).toBe(true); expect(isSuppressionRuleConfiguredWithDuration('saved_query')).toBe(true); expect(isSuppressionRuleConfiguredWithDuration('query')).toBe(true); @@ -275,7 +276,6 @@ describe('Alert Suppression Rules', () => { // Rule types that don't support alert suppression: expect(isSuppressionRuleConfiguredWithDuration('machine_learning')).toBe(false); - expect(isSuppressionRuleConfiguredWithDuration('esql')).toBe(false); }); test('should return false for an unknown rule type', () => { @@ -288,6 +288,7 @@ describe('Alert Suppression Rules', () => { describe('isSuppressionRuleConfiguredWithGroupBy', () => { test('should return true for a suppressible rule type with groupBy', () => { // Rule types that support alert suppression groupBy: + expect(isSuppressionRuleConfiguredWithGroupBy('esql')).toBe(true); expect(isSuppressionRuleConfiguredWithGroupBy('saved_query')).toBe(true); expect(isSuppressionRuleConfiguredWithGroupBy('query')).toBe(true); expect(isSuppressionRuleConfiguredWithGroupBy('threat_match')).toBe(true); @@ -296,7 +297,6 @@ describe('Alert Suppression Rules', () => { // Rule types that don't support alert suppression: expect(isSuppressionRuleConfiguredWithGroupBy('machine_learning')).toBe(false); - expect(isSuppressionRuleConfiguredWithGroupBy('esql')).toBe(false); }); test('should return false for a threshold rule type', () => { @@ -314,6 +314,7 @@ describe('Alert Suppression Rules', () => { describe('isSuppressionRuleConfiguredWithMissingFields', () => { test('should return true for a suppressible rule type with missing fields', () => { // Rule types that support alert suppression groupBy: + expect(isSuppressionRuleConfiguredWithMissingFields('esql')).toBe(true); expect(isSuppressionRuleConfiguredWithMissingFields('saved_query')).toBe(true); expect(isSuppressionRuleConfiguredWithMissingFields('query')).toBe(true); expect(isSuppressionRuleConfiguredWithMissingFields('threat_match')).toBe(true); @@ -322,7 +323,6 @@ describe('Alert Suppression Rules', () => { // Rule types that don't support alert suppression: expect(isSuppressionRuleConfiguredWithMissingFields('machine_learning')).toBe(false); - expect(isSuppressionRuleConfiguredWithMissingFields('esql')).toBe(false); }); test('should return false for a threshold rule type', () => { diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index da993a18debe3a..565177fa8b5607 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -180,6 +180,11 @@ export const allowedExperimentalValues = Object.freeze({ */ disableTimelineSaveTour: false, + /** + * Enables alerts suppression for ES|QL rules + */ + alertSuppressionForEsqlRuleEnabled: false, + /** * Enables the risk engine privileges route * and associated callout in the UI diff --git a/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/installation_and_upgrade.md b/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/installation_and_upgrade.md index 24aaf34764034a..beda8a9517830a 100644 --- a/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/installation_and_upgrade.md +++ b/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/installation_and_upgrade.md @@ -198,6 +198,9 @@ Examples: │ New Terms │ Custom query │ Overview │ Definition │ │ New Terms │ Filters │ Overview │ Definition │ │ ESQL │ ESQL query │ Overview │ Definition │ +│ ESQL │ Suppress alerts by │ Overview │ Definition │ +│ ESQL │ Suppress alerts for │ Overview │ Definition │ +│ ESQL │ If a suppression field is missing │ Overview │ Definition │ ``` ## Scenarios diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts index 889d74a1c65037..07f14830d6a71f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts @@ -5,7 +5,13 @@ * 2.0. */ -import { computeHasMetadataOperator } from './esql_validator'; +import { parseEsqlQuery, computeHasMetadataOperator } from './esql_validator'; + +import { computeIsESQLQueryAggregating } from '@kbn/securitysolution-utils'; + +jest.mock('@kbn/securitysolution-utils', () => ({ computeIsESQLQueryAggregating: jest.fn() })); + +const computeIsESQLQueryAggregatingMock = computeIsESQLQueryAggregating as jest.Mock; describe('computeHasMetadataOperator', () => { it('should be false if query does not have operator', () => { @@ -44,3 +50,37 @@ describe('computeHasMetadataOperator', () => { ).toBe(true); }); }); + +describe('parseEsqlQuery', () => { + it('returns isMissingMetadataOperator true when query is not aggregating and does not have metadata operator', () => { + computeIsESQLQueryAggregatingMock.mockReturnValueOnce(false); + + expect(parseEsqlQuery('from test*')).toEqual({ + isEsqlQueryAggregating: false, + isMissingMetadataOperator: true, + }); + }); + + it('returns isMissingMetadataOperator false when query is not aggregating and has metadata operator', () => { + computeIsESQLQueryAggregatingMock.mockReturnValueOnce(false); + + expect(parseEsqlQuery('from test* metadata _id')).toEqual({ + isEsqlQueryAggregating: false, + isMissingMetadataOperator: false, + }); + }); + + it('returns isMissingMetadataOperator false when query is aggregating', () => { + computeIsESQLQueryAggregatingMock.mockReturnValue(true); + + expect(parseEsqlQuery('from test*')).toEqual({ + isEsqlQueryAggregating: true, + isMissingMetadataOperator: false, + }); + + expect(parseEsqlQuery('from test* metadata _id')).toEqual({ + isEsqlQueryAggregating: true, + isMissingMetadataOperator: false, + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts index b7e9f1b033e31d..1f0bcb6596b40c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts @@ -6,11 +6,10 @@ */ import { isEmpty } from 'lodash'; - +import type { QueryClient } from '@tanstack/react-query'; import { computeIsESQLQueryAggregating } from '@kbn/securitysolution-utils'; import { KibanaServices } from '../../../common/lib/kibana'; -import { securitySolutionQueryClient } from '../../../common/containers/query_client/query_client_provider'; import type { ValidationError, ValidationFunc } from '../../../shared_imports'; import { isEsqlRule } from '../../../../common/detection_engine/utils'; @@ -48,7 +47,7 @@ export const computeHasMetadataOperator = (esqlQuery: string) => { export const esqlValidator = async ( ...args: Parameters ): Promise | void | undefined> => { - const [{ value, formData }] = args; + const [{ value, formData, customData }] = args; const { query: queryValue } = value as FieldValueQueryBar; const query = queryValue.query as string; const { ruleType } = formData as DefineStepRule; @@ -59,19 +58,19 @@ export const esqlValidator = async ( } try { - const services = KibanaServices.get(); + const queryClient = (customData.value as { queryClient: QueryClient | undefined })?.queryClient; - const isEsqlQueryAggregating = computeIsESQLQueryAggregating(query); + const services = KibanaServices.get(); + const { isEsqlQueryAggregating, isMissingMetadataOperator } = parseEsqlQuery(query); - // non-aggregating query which does not have metadata, is not a valid one - if (!isEsqlQueryAggregating && !computeHasMetadataOperator(query)) { + if (isMissingMetadataOperator) { return { code: ERROR_CODES.ERR_MISSING_ID_FIELD_FROM_RESULT, message: i18n.ESQL_VALIDATION_MISSING_ID_IN_QUERY_ERROR, }; } - const columns = await securitySolutionQueryClient.fetchQuery( + const columns = await queryClient?.fetchQuery( getEsqlQueryConfig({ esqlQuery: query, search: services.data.search.search }) ); @@ -92,3 +91,17 @@ export const esqlValidator = async ( return constructValidationError(error); } }; + +/** + * check if esql query valid for Security rule: + * - if it's non aggregation query it must have metadata operator + */ +export const parseEsqlQuery = (query: string) => { + const isEsqlQueryAggregating = computeIsESQLQueryAggregating(query); + + return { + isEsqlQueryAggregating, + // non-aggregating query which does not have [metadata], is not a valid one + isMissingMetadataOperator: !isEsqlQueryAggregating && !computeHasMetadataOperator(query), + }; +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx index 7950493a1b9894..86950416971208 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx @@ -575,7 +575,7 @@ describe('description_step', () => { }); describe('alert suppression', () => { - const ruleTypesWithoutSuppression: Type[] = ['esql', 'machine_learning']; + const ruleTypesWithoutSuppression: Type[] = ['machine_learning']; const suppressionFields = { groupByDuration: { unit: 'm', diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx index 3fa1852e6aa056..7666a9ba8aee31 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx @@ -42,7 +42,7 @@ import { useKibana } from '../../../../common/lib/kibana'; import { useRuleIndices } from '../../../rule_management/logic/use_rule_indices'; import { EsqlAutocomplete } from '../esql_autocomplete'; import { MultiSelectFieldsAutocomplete } from '../multi_select_fields'; -import { useInvestigationFields } from '../../hooks/use_investigation_fields'; +import { useAllEsqlRuleFields } from '../../hooks'; import { MaxSignals } from '../max_signals'; const CommonUseField = getUseField({ component: Field }); @@ -133,10 +133,11 @@ const StepAboutRuleComponent: FC = ({ [getFields] ); - const { investigationFields, isLoading: isInvestigationFieldsLoading } = useInvestigationFields({ - esqlQuery: isEsqlRuleValue ? esqlQuery : undefined, - indexPatternsFields: indexPattern.fields, - }); + const { fields: investigationFields, isLoading: isInvestigationFieldsLoading } = + useAllEsqlRuleFields({ + esqlQuery: isEsqlRuleValue ? esqlQuery : undefined, + indexPatternsFields: indexPattern.fields, + }); return ( <> diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx index 56073e2a6af594..839454922a14ad 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx @@ -28,6 +28,7 @@ import type { FieldSpec } from '@kbn/data-views-plugin/common'; import usePrevious from 'react-use/lib/usePrevious'; import type { BrowserFields } from '@kbn/timelines-plugin/common'; import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import { useQueryClient } from '@tanstack/react-query'; import type { SavedQuery } from '@kbn/data-plugin/public'; import type { DataViewBase } from '@kbn/es-query'; @@ -99,6 +100,7 @@ import { AlertSuppressionMissingFieldsStrategyEnum } from '../../../../../common import { DurationInput } from '../duration_input'; import { MINIMUM_LICENSE_FOR_SUPPRESSION } from '../../../../../common/detection_engine/constants'; import { useUpsellingMessage } from '../../../../common/hooks/use_upselling'; +import { useAllEsqlRuleFields } from '../../hooks'; import { useAlertSuppression } from '../../../rule_management/logic/use_alert_suppression'; import { RelatedIntegrations } from '../../../rule_creation/components/related_integrations'; @@ -191,6 +193,8 @@ const StepDefineRuleComponent: FC = ({ thresholdFields, enableThresholdSuppression, }) => { + const queryClient = useQueryClient(); + const { isSuppressionEnabled: isAlertSuppressionEnabled } = useAlertSuppression(ruleType); const mlCapabilities = useMlCapabilities(); const [openTimelineSearch, setOpenTimelineSearch] = useState(false); @@ -453,6 +457,13 @@ const StepDefineRuleComponent: FC = ({ ); const [{ queryBar }] = useFormData({ form, watch: ['queryBar'] }); + + const { fields: esqlSuppressionFields, isLoading: isEsqlSuppressionLoading } = + useAllEsqlRuleFields({ + esqlQuery: isEsqlRule(ruleType) ? (queryBar?.query?.query as string) : undefined, + indexPatternsFields: indexPattern.fields, + }); + const areSuppressionFieldsDisabledBySequence = isEqlRule(ruleType) && isEqlSequenceQuery(queryBar?.query?.query as string) && @@ -745,6 +756,7 @@ const StepDefineRuleComponent: FC = ({ path="queryBar" config={esqlQueryBarConfig} component={QueryBarDefineRule} + validationData={{ queryClient }} componentProps={{ ...queryBarProps, dataTestSubj: 'detectionEngineStepDefineRuleEsqlQueryBar', @@ -752,7 +764,7 @@ const StepDefineRuleComponent: FC = ({ }} /> ), - [queryBarProps, esqlQueryBarConfig] + [queryBarProps, esqlQueryBarConfig, queryClient] ); const QueryBarMemo = useMemo( @@ -1060,9 +1072,13 @@ const StepDefineRuleComponent: FC = ({ path="groupByFields" component={MultiSelectFieldsAutocomplete} componentProps={{ - browserFields: termsAggregationFields, + browserFields: isEsqlRule(ruleType) + ? esqlSuppressionFields + : termsAggregationFields, isDisabled: - !isAlertSuppressionLicenseValid || areSuppressionFieldsDisabledBySequence, + !isAlertSuppressionLicenseValid || + areSuppressionFieldsDisabledBySequence || + isEsqlSuppressionLoading, disabledText: areSuppressionFieldsDisabledBySequence ? i18n.EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP : alertSuppressionUpsellingMessage, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts index c035fef5af6e44..c92c35688dd3b8 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts @@ -7,6 +7,8 @@ import { useCallback } from 'react'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { isEsqlRule } from '../../../../../common/detection_engine/utils'; /** * transforms DefineStepRule fields according to experimental feature flags @@ -14,9 +16,30 @@ import type { DefineStepRule } from '../../../../detections/pages/detection_engi export const useExperimentalFeatureFieldsTransform = >(): (( fields: T ) => T) => { - const transformer = useCallback((fields: T) => { - return fields; - }, []); + const isAlertSuppressionForEsqlRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForEsqlRuleEnabled' + ); + + const transformer = useCallback( + (fields: T) => { + const isSuppressionDisabled = + isEsqlRule(fields.ruleType) && !isAlertSuppressionForEsqlRuleEnabled; + + // reset any alert suppression values hidden behind feature flag + if (isSuppressionDisabled) { + return { + ...fields, + groupByFields: [], + groupByRadioSelection: undefined, + groupByDuration: undefined, + suppressionMissingFields: undefined, + }; + } + + return fields; + }, + [isAlertSuppressionForEsqlRuleEnabled] + ); return transformer; }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/index.tsx index d56c317b93fb19..ea248587365aaf 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/index.tsx @@ -7,3 +7,4 @@ export { useEsqlIndex } from './use_esql_index'; export { useEsqlQueryForAboutStep } from './use_esql_query_for_about_step'; +export { useAllEsqlRuleFields } from './use_all_esql_rule_fields'; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.test.ts similarity index 50% rename from x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.test.ts rename to x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.test.ts index 597d44f47f0d92..996b3ca0448643 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.test.ts @@ -7,16 +7,15 @@ import { renderHook } from '@testing-library/react-hooks'; import type { DataViewFieldBase } from '@kbn/es-query'; +import { getESQLQueryColumns } from '@kbn/esql-utils'; -import { useInvestigationFields } from './use_investigation_fields'; +import { useAllEsqlRuleFields } from './use_all_esql_rule_fields'; import { createQueryWrapperMock } from '../../../common/__mocks__/query_wrapper'; +import { parseEsqlQuery } from '../../rule_creation/logic/esql_validator'; -import { computeIsESQLQueryAggregating } from '@kbn/securitysolution-utils'; -import { getESQLQueryColumns } from '@kbn/esql-utils'; - -jest.mock('@kbn/securitysolution-utils', () => ({ - computeIsESQLQueryAggregating: jest.fn(), +jest.mock('../../rule_creation/logic/esql_validator', () => ({ + parseEsqlQuery: jest.fn(), })); jest.mock('@kbn/esql-utils', () => { @@ -26,7 +25,7 @@ jest.mock('@kbn/esql-utils', () => { }; }); -const computeIsESQLQueryAggregatingMock = computeIsESQLQueryAggregating as jest.Mock; +const parseEsqlQueryMock = parseEsqlQuery as jest.Mock; const getESQLQueryColumnsMock = getESQLQueryColumns as jest.Mock; const { wrapper } = createQueryWrapperMock(); @@ -48,16 +47,26 @@ const mockEsqlDatatable = { columns: [{ id: '_custom_field', name: '_custom_field', meta: { type: 'string' } }], }; -describe('useInvestigationFields', () => { +describe('useAllEsqlRuleFields', () => { beforeEach(() => { jest.clearAllMocks(); - getESQLQueryColumnsMock.mockResolvedValue(mockEsqlDatatable.columns); + getESQLQueryColumnsMock.mockImplementation(({ esqlQuery }) => + Promise.resolve( + esqlQuery === 'deduplicate_test' + ? [ + { id: 'agent.name', name: 'agent.name', meta: { type: 'string' } }, // agent.name is already present in mockIndexPatternFields + { id: '_custom_field_0', name: '_custom_field_0', meta: { type: 'string' } }, + ] + : mockEsqlDatatable.columns + ) + ); + parseEsqlQueryMock.mockReturnValue({ isEsqlQueryAggregating: false }); }); it('should return loading true when esql fields still loading', () => { const { result } = renderHook( () => - useInvestigationFields({ + useAllEsqlRuleFields({ esqlQuery: mockEsqlQuery, indexPatternsFields: mockIndexPatternFields, }), @@ -68,71 +77,103 @@ describe('useInvestigationFields', () => { }); it('should return only index pattern fields when ES|QL query is empty', async () => { - const { result, waitForNextUpdate } = renderHook( + const { result } = renderHook( () => - useInvestigationFields({ + useAllEsqlRuleFields({ esqlQuery: '', indexPatternsFields: mockIndexPatternFields, }), { wrapper } ); - await waitForNextUpdate(); - - expect(result.current.investigationFields).toEqual(mockIndexPatternFields); + expect(result.current.fields).toEqual(mockIndexPatternFields); }); it('should return only index pattern fields when ES|QL query is undefined', async () => { const { result } = renderHook( () => - useInvestigationFields({ + useAllEsqlRuleFields({ esqlQuery: undefined, indexPatternsFields: mockIndexPatternFields, }), { wrapper } ); - expect(result.current.investigationFields).toEqual(mockIndexPatternFields); + expect(result.current.fields).toEqual(mockIndexPatternFields); }); it('should return index pattern fields concatenated with ES|QL fields when ES|QL query is non-aggregating', async () => { - computeIsESQLQueryAggregatingMock.mockReturnValue(false); + parseEsqlQueryMock.mockReturnValue({ isEsqlQueryAggregating: false }); - const { result } = renderHook( + const { result, waitFor } = renderHook( () => - useInvestigationFields({ + useAllEsqlRuleFields({ esqlQuery: mockEsqlQuery, indexPatternsFields: mockIndexPatternFields, }), { wrapper } ); - expect(result.current.investigationFields).toEqual([ - { - name: '_custom_field', - type: 'string', - }, - ...mockIndexPatternFields, - ]); + await waitFor(() => { + expect(result.current.fields).toEqual([ + { + name: '_custom_field', + type: 'string', + }, + ...mockIndexPatternFields, + ]); + }); }); it('should return only ES|QL fields when ES|QL query is aggregating', async () => { - computeIsESQLQueryAggregatingMock.mockReturnValue(true); + parseEsqlQueryMock.mockReturnValue({ isEsqlQueryAggregating: true }); - const { result } = renderHook( + const { result, waitFor } = renderHook( () => - useInvestigationFields({ + useAllEsqlRuleFields({ esqlQuery: mockEsqlQuery, indexPatternsFields: mockIndexPatternFields, }), { wrapper } ); + await waitFor(() => { + expect(result.current.fields).toEqual([ + { + name: '_custom_field', + type: 'string', + }, + ]); + }); + }); + + it('should deduplicate index pattern fields and ES|QL fields when fields have same name', async () => { + // getESQLQueryColumnsMock.mockClear(); + parseEsqlQueryMock.mockReturnValue({ isEsqlQueryAggregating: false }); + + const { result, waitFor } = renderHook( + () => + useAllEsqlRuleFields({ + esqlQuery: 'deduplicate_test', + indexPatternsFields: mockIndexPatternFields, + }), + { wrapper } + ); - expect(result.current.investigationFields).toEqual([ - { - name: '_custom_field', - type: 'string', - }, - ]); + await waitFor(() => { + expect(result.current.fields).toEqual([ + { + name: 'agent.name', + type: 'string', + }, + { + name: '_custom_field_0', + type: 'string', + }, + { + name: 'agent.type', + type: 'string', + }, + ]); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.ts new file mode 100644 index 00000000000000..a67b990c88b80a --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_all_esql_rule_fields.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useMemo, useState } from 'react'; +import type { DatatableColumn } from '@kbn/expressions-plugin/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataViewFieldBase } from '@kbn/es-query'; +import useDebounce from 'react-use/lib/useDebounce'; + +import { useQuery } from '@tanstack/react-query'; + +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { parseEsqlQuery } from '../../rule_creation/logic/esql_validator'; + +import { getEsqlQueryConfig } from '../../rule_creation/logic/get_esql_query_config'; + +const esqlToFields = ( + columns: { error: unknown } | DatatableColumn[] | undefined | null +): DataViewFieldBase[] => { + if (columns && 'error' in columns) { + return []; + } + + const fields = (columns ?? []).map(({ id, meta }) => { + return { + name: id, + type: meta.type, + }; + }); + + return fields; +}; + +type UseEsqlFields = (esqlQuery: string | undefined) => { + isLoading: boolean; + fields: DataViewFieldBase[]; +}; + +/** + * fetches ES|QL fields and convert them to DataViewBase fields + */ +export const useEsqlFields: UseEsqlFields = (esqlQuery) => { + const kibana = useKibana<{ data: DataPublicPluginStart }>(); + + const { data: dataService } = kibana.services; + + const queryConfig = getEsqlQueryConfig({ esqlQuery, search: dataService?.search?.search }); + const { data, isLoading } = useQuery(queryConfig); + + const fields = useMemo(() => { + return esqlToFields(data); + }, [data]); + + return { + fields, + isLoading, + }; +}; + +/** + * if ES|QL fields and index pattern fields have same name, duplicates will be removed and the rest of fields merged + * ES|QL fields are first in order, since these are the fields that returned in ES|QL response + * */ +const deduplicateAndMergeFields = ( + esqlFields: DataViewFieldBase[], + indexPatternsFields: DataViewFieldBase[] +) => { + const esqlFieldsSet = new Set(esqlFields.map((field) => field.name)); + return [...esqlFields, ...indexPatternsFields.filter((field) => !esqlFieldsSet.has(field.name))]; +}; + +type UseAllEsqlRuleFields = (params: { + esqlQuery: string | undefined; + indexPatternsFields: DataViewFieldBase[]; +}) => { + isLoading: boolean; + fields: DataViewFieldBase[]; +}; + +/** + * returns all fields available for ES|QL rule: + * - fields returned from ES|QL query for aggregating queries + * - fields returned from ES|QL query + index fields for non-aggregating queries + */ +export const useAllEsqlRuleFields: UseAllEsqlRuleFields = ({ esqlQuery, indexPatternsFields }) => { + const [debouncedEsqlQuery, setDebouncedEsqlQuery] = useState(undefined); + const { fields: esqlFields, isLoading } = useEsqlFields(debouncedEsqlQuery); + + const { isEsqlQueryAggregating } = useMemo( + () => parseEsqlQuery(debouncedEsqlQuery ?? ''), + [debouncedEsqlQuery] + ); + + useDebounce( + () => { + setDebouncedEsqlQuery(esqlQuery); + }, + 300, + [esqlQuery] + ); + + const fields = useMemo(() => { + if (!debouncedEsqlQuery) { + return indexPatternsFields; + } + return isEsqlQueryAggregating + ? esqlFields + : deduplicateAndMergeFields(esqlFields, indexPatternsFields); + }, [esqlFields, debouncedEsqlQuery, indexPatternsFields, isEsqlQueryAggregating]); + + return { + fields, + isLoading, + }; +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.ts deleted file mode 100644 index 1627bddaa82be1..00000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/hooks/use_investigation_fields.ts +++ /dev/null @@ -1,92 +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 { useMemo } from 'react'; -import type { DatatableColumn } from '@kbn/expressions-plugin/public'; -import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { DataViewFieldBase } from '@kbn/es-query'; -import { computeIsESQLQueryAggregating } from '@kbn/securitysolution-utils'; - -import { useQuery } from '@tanstack/react-query'; - -import { useKibana } from '@kbn/kibana-react-plugin/public'; - -import { getEsqlQueryConfig } from '../../rule_creation/logic/get_esql_query_config'; - -const esqlToFields = ( - columns: { error: unknown } | DatatableColumn[] | undefined | null -): DataViewFieldBase[] => { - if (columns && 'error' in columns) { - return []; - } - - const fields = (columns ?? []).map(({ id, meta }) => { - return { - name: id, - type: meta.type, - }; - }); - - return fields; -}; - -type UseEsqlFields = (esqlQuery: string | undefined) => { - isLoading: boolean; - fields: DataViewFieldBase[]; -}; - -/** - * fetches ES|QL fields and convert them to DataViewBase fields - */ -const useEsqlFields: UseEsqlFields = (esqlQuery) => { - const kibana = useKibana<{ data: DataPublicPluginStart }>(); - - const { data: dataService } = kibana.services; - - const queryConfig = getEsqlQueryConfig({ esqlQuery, search: dataService?.search?.search }); - const { data, isLoading } = useQuery(queryConfig); - - const fields = useMemo(() => { - return esqlToFields(data); - }, [data]); - - return { - fields, - isLoading, - }; -}; - -type UseInvestigationFields = (params: { - esqlQuery: string | undefined; - indexPatternsFields: DataViewFieldBase[]; -}) => { - isLoading: boolean; - investigationFields: DataViewFieldBase[]; -}; - -export const useInvestigationFields: UseInvestigationFields = ({ - esqlQuery, - indexPatternsFields, -}) => { - const { fields: esqlFields, isLoading } = useEsqlFields(esqlQuery); - - const investigationFields = useMemo(() => { - if (!esqlQuery) { - return indexPatternsFields; - } - - // alerts generated from non-aggregating queries are enriched with source document - // so, index patterns fields should be included in the list of investigation fields - const isEsqlQueryAggregating = computeIsESQLQueryAggregating(esqlQuery); - - return isEsqlQueryAggregating ? esqlFields : [...esqlFields, ...indexPatternsFields]; - }, [esqlFields, esqlQuery, indexPatternsFields]); - - return { - investigationFields, - isLoading, - }; -}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/helpers.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/helpers.ts index 11da431e3e6029..f281b3b6b4a2b6 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/helpers.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/helpers.ts @@ -512,6 +512,7 @@ export const formatDefineStepData = (defineStepData: DefineStepRule): DefineStep language: ruleFields.queryBar?.query?.language, query: ruleFields.queryBar?.query?.query as string, required_fields: requiredFields, + ...alertSuppressionFields, } : { ...alertSuppressionFields, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx index 0d9c0ebb75ca42..d12a5ff97d50a6 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx @@ -36,4 +36,19 @@ describe('useAlertSuppression', () => { expect(result.current.isSuppressionEnabled).toBe(false); }); + + it('should return isSuppressionEnabled false if ES|QL Feature Flag is disabled', () => { + const { result } = renderHook(() => useAlertSuppression('esql')); + + expect(result.current.isSuppressionEnabled).toBe(false); + }); + + it('should return isSuppressionEnabled true if ES|QL Feature Flag is enabled', () => { + jest + .spyOn(useIsExperimentalFeatureEnabledMock, 'useIsExperimentalFeatureEnabled') + .mockImplementation((flag) => flag === 'alertSuppressionForEsqlRuleEnabled'); + const { result } = renderHook(() => useAlertSuppression('esql')); + + expect(result.current.isSuppressionEnabled).toBe(true); + }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx index 6e1b2a4d6163f5..1c9f139633c8ca 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx @@ -7,19 +7,28 @@ import { useCallback } from 'react'; import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; import { isSuppressibleAlertRule } from '../../../../common/detection_engine/utils'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; export interface UseAlertSuppressionReturn { isSuppressionEnabled: boolean; } export const useAlertSuppression = (ruleType: Type | undefined): UseAlertSuppressionReturn => { + const isAlertSuppressionForEsqlRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForEsqlRuleEnabled' + ); + const isSuppressionEnabledForRuleType = useCallback(() => { if (!ruleType) { return false; } + // Remove this condition when the Feature Flag for enabling Suppression in the New terms rule is removed. + if (ruleType === 'esql') { + return isSuppressibleAlertRule(ruleType) && isAlertSuppressionForEsqlRuleEnabled; + } return isSuppressibleAlertRule(ruleType); - }, [ruleType]); + }, [ruleType, isAlertSuppressionForEsqlRuleEnabled]); return { isSuppressionEnabled: isSuppressionEnabledForRuleType(), diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx index 3a8153d9fa2b3d..7a3ed25b8084eb 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx @@ -42,7 +42,7 @@ import { ALERT_NEW_TERMS, ALERT_RULE_INDICES, } from '../../../../common/field_maps/field_names'; -import { isEqlRule } from '../../../../common/detection_engine/utils'; +import { isEqlRule, isEsqlRule } from '../../../../common/detection_engine/utils'; import type { TimelineResult } from '../../../../common/api/timeline'; import { TimelineId } from '../../../../common/types/timeline'; import { TimelineStatus, TimelineType } from '../../../../common/api/timeline'; @@ -279,6 +279,11 @@ export const isEqlAlert = (ecsData: Ecs): boolean => { return isEqlRule(ruleType) || (Array.isArray(ruleType) && isEqlRule(ruleType[0])); }; +export const isEsqlAlert = (ecsData: Ecs): boolean => { + const ruleType = getField(ecsData, ALERT_RULE_TYPE); + return isEsqlRule(ruleType) || (Array.isArray(ruleType) && isEsqlRule(ruleType[0])); +}; + export const isNewTermsAlert = (ecsData: Ecs): boolean => { const ruleType = getField(ecsData, ALERT_RULE_TYPE); return ( @@ -1026,8 +1031,8 @@ export const sendAlertToTimelineAction = async ({ }, getExceptionFilter ); - // The Query field should remain unpopulated with the suppressed EQL alert. - } else if (isSuppressedAlert(ecsData) && !isEqlAlert(ecsData)) { + // The Query field should remain unpopulated with the suppressed EQL/ES|QL alert. + } else if (isSuppressedAlert(ecsData) && !isEqlAlert(ecsData) && !isEsqlAlert(ecsData)) { return createSuppressedTimeline( ecsData, createTimeline, @@ -1097,8 +1102,8 @@ export const sendAlertToTimelineAction = async ({ return createThresholdTimeline(ecsData, createTimeline, noteContent, {}, getExceptionFilter); } else if (isNewTermsAlert(ecsData)) { return createNewTermsTimeline(ecsData, createTimeline, noteContent, {}, getExceptionFilter); - // The Query field should remain unpopulated with the suppressed EQL alert. - } else if (isSuppressedAlert(ecsData) && !isEqlAlert(ecsData)) { + // The Query field should remain unpopulated with the suppressed EQL/ES|QL alert. + } else if (isSuppressedAlert(ecsData) && !isEqlAlert(ecsData) && !isEsqlAlert(ecsData)) { return createSuppressedTimeline(ecsData, createTimeline, noteContent, {}, getExceptionFilter); } else { let { dataProviders, filters } = buildTimelineDataProviderOrFilter( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.test.ts index d0a14151cabac8..537d7b6abaf8a9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.test.ts @@ -13,6 +13,7 @@ import { import { getBaseRuleParams, getEqlRuleParams, + getEsqlRuleParams, getMlRuleParams, getNewTermsRuleParams, getQueryRuleParams, @@ -219,6 +220,27 @@ describe('rule_converters', () => { ); }); + test('should accept ES|QL alerts suppression params', () => { + const patchParams = { + alert_suppression: { + group_by: ['agent.name'], + duration: { value: 4, unit: 'h' as const }, + missing_fields_strategy: 'doNotSuppress' as const, + }, + }; + const rule = getEsqlRuleParams(); + const patchedParams = patchTypeSpecificSnakeToCamel(patchParams, rule); + expect(patchedParams).toEqual( + expect.objectContaining({ + alertSuppression: { + groupBy: ['agent.name'], + missingFieldsStrategy: 'doNotSuppress', + duration: { value: 4, unit: 'h' }, + }, + }) + ); + }); + test('should accept threshold alerts suppression params', () => { const patchParams = { alert_suppression: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.ts index 355fa626f78484..fd77213b178b5c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/normalization/rule_converters.ts @@ -121,6 +121,7 @@ export const typeSpecificSnakeToCamel = ( type: params.type, language: params.language, query: params.query, + alertSuppression: convertAlertSuppressionToCamel(params.alert_suppression), }; } case 'threat_match': { @@ -237,6 +238,8 @@ const patchEsqlParams = ( type: existingRule.type, language: params.language ?? existingRule.language, query: params.query ?? existingRule.query, + alertSuppression: + convertAlertSuppressionToCamel(params.alert_suppression) ?? existingRule.alertSuppression, }; }; @@ -568,6 +571,7 @@ export const typeSpecificCamelToSnake = ( type: params.type, language: params.language, query: params.query, + alert_suppression: convertAlertSuppressionToSnake(params.alertSuppression), }; } case 'threat_match': { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts index 9ebf17caf9a859..3a4fa1dadd7781 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts @@ -12,6 +12,7 @@ import type { BaseRuleParams, CompleteRule, EqlRuleParams, + EsqlRuleParams, MachineLearningRuleParams, NewTermsRuleParams, QueryRuleParams, @@ -103,6 +104,16 @@ export const getEqlRuleParams = (rewrites?: Partial): EqlRulePara }; }; +export const getEsqlRuleParams = (rewrites?: Partial): EsqlRuleParams => { + return { + ...getBaseRuleParams(), + type: 'esql', + language: 'esql', + query: 'from auditbeat* metadata _id', + ...rewrites, + }; +}; + export const getMlRuleParams = ( rewrites?: Partial ): MachineLearningRuleParams => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.ts index d116f6fd712091..120ddd3981165c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.ts @@ -169,6 +169,7 @@ export const EsqlSpecificRuleParams = z.object({ type: z.literal('esql'), language: z.literal('esql'), query: RuleQuery, + alertSuppression: AlertSuppressionCamel.optional(), }); export type EsqlRuleParams = BaseRuleParams & EsqlSpecificRuleParams; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/create_esql_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/create_esql_alert_type.ts index 15ff7adb11013b..10c82ad8fed7cf 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/create_esql_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/create_esql_alert_type.ts @@ -16,7 +16,7 @@ import type { CreateRuleOptions, SecurityAlertType } from '../types'; export const createEsqlAlertType = ( createOptions: CreateRuleOptions ): SecurityAlertType => { - const { version } = createOptions; + const { version, experimentalFeatures, licensing } = createOptions; return { id: ESQL_RULE_TYPE_ID, name: 'ES|QL Rule', @@ -44,6 +44,6 @@ export const createEsqlAlertType = ( isExportable: false, category: DEFAULT_APP_CATEGORIES.security.id, producer: SERVER_APP_ID, - executor: (params) => esqlExecutor({ ...params, version }), + executor: (params) => esqlExecutor({ ...params, experimentalFeatures, version, licensing }), }; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts index 64ed0560f36099..3887f5db81a5a2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts @@ -11,19 +11,24 @@ import type { AlertInstanceState, RuleExecutorServices, } from '@kbn/alerting-plugin/server'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import { computeIsESQLQueryAggregating, getIndexListFromEsqlQuery, } from '@kbn/securitysolution-utils'; +import type { LicensingPluginSetup } from '@kbn/licensing-plugin/server'; import { buildEsqlSearchRequest } from './build_esql_search_request'; import { performEsqlRequest } from './esql_request'; import { wrapEsqlAlerts } from './wrap_esql_alerts'; +import { wrapSuppressedEsqlAlerts } from './wrap_suppressed_esql_alerts'; +import { bulkCreateSuppressedAlertsInMemory } from '../utils/bulk_create_suppressed_alerts_in_memory'; import { createEnrichEventsFunction } from '../utils/enrichments'; import { rowToDocument } from './utils'; import { fetchSourceDocuments } from './fetch_source_documents'; +import { buildReasonMessageForEsqlAlert } from '../utils/reason_formatters'; -import type { RunOpts } from '../types'; +import type { RunOpts, SignalSource } from '../types'; import { addToSearchAfterReturn, @@ -31,16 +36,12 @@ import { makeFloatString, getUnprocessedExceptionsWarnings, getMaxSignalsWarning, + getSuppressionMaxSignalsWarning, } from '../utils/utils'; import type { EsqlRuleParams } from '../../rule_schema'; import { withSecuritySpan } from '../../../../utils/with_security_span'; - -/** - * ES|QL returns results as a single page. max size of 10,000 - * while we try increase size of the request to catch all events - * we don't want to overload ES/Kibana with large responses - */ -const ESQL_PAGE_SIZE_CIRCUIT_BREAKER = 1000; +import { getIsAlertSuppressionActive } from '../utils/get_is_alert_suppression_active'; +import type { ExperimentalFeatures } from '../../../../../common'; export const esqlExecutor = async ({ runOpts: { @@ -55,18 +56,29 @@ export const esqlExecutor = async ({ unprocessedExceptions, alertTimestampOverride, publicBaseUrl, + alertWithSuppression, }, services, state, spaceId, + experimentalFeatures, + licensing, }: { runOpts: RunOpts; services: RuleExecutorServices; state: object; spaceId: string; version: string; + experimentalFeatures: ExperimentalFeatures; + licensing: LicensingPluginSetup; }) => { const ruleParams = completeRule.ruleParams; + /** + * ES|QL returns results as a single page. max size of 10,000 + * while we try increase size of the request to catch all alerts that might been deduplicated + * we don't want to overload ES/Kibana with large responses + */ + const ESQL_PAGE_SIZE_CIRCUIT_BREAKER = tuple.maxSignals * 3; return withSecuritySpan('esqlExecutor', async () => { const result = createSearchAfterReturnType(); @@ -120,35 +132,100 @@ export const esqlExecutor = async ({ isRuleAggregating, }); - const wrappedAlerts = wrapEsqlAlerts({ - sourceDocuments, - isRuleAggregating, - results, - spaceId, - completeRule, - mergeStrategy, - alertTimestampOverride, - ruleExecutionLogger, - publicBaseUrl, - tuple, + const isAlertSuppressionActive = await getIsAlertSuppressionActive({ + alertSuppression: completeRule.ruleParams.alertSuppression, + licensing, + isFeatureDisabled: !experimentalFeatures?.alertSuppressionForEsqlRuleEnabled, }); - const enrichAlerts = createEnrichEventsFunction({ - services, - logger: ruleExecutionLogger, + const wrapHits = (events: Array>) => + wrapEsqlAlerts({ + events, + spaceId, + completeRule, + mergeStrategy, + isRuleAggregating, + alertTimestampOverride, + ruleExecutionLogger, + publicBaseUrl, + tuple, + }); + + const syntheticHits: Array> = results.map((document) => { + const { _id, _version, _index, ...source } = document; + + return { + _source: source as SignalSource, + fields: _id ? sourceDocuments[_id]?.fields : {}, + _id: _id ?? '', + _index: _index ?? '', + }; }); - const bulkCreateResult = await bulkCreate( - wrappedAlerts, - tuple.maxSignals - result.createdSignalsCount, - enrichAlerts - ); - addToSearchAfterReturn({ current: result, next: bulkCreateResult }); - ruleExecutionLogger.debug(`Created ${bulkCreateResult.createdItemsCount} alerts`); + if (isAlertSuppressionActive) { + const wrapSuppressedHits = (events: Array>) => + wrapSuppressedEsqlAlerts({ + events, + spaceId, + completeRule, + mergeStrategy, + isRuleAggregating, + alertTimestampOverride, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp, + secondaryTimestamp, + tuple, + }); + + const bulkCreateResult = await bulkCreateSuppressedAlertsInMemory({ + enrichedEvents: syntheticHits, + toReturn: result, + wrapHits, + bulkCreate, + services, + ruleExecutionLogger, + tuple, + alertSuppression: completeRule.ruleParams.alertSuppression, + wrapSuppressedHits, + alertTimestampOverride, + alertWithSuppression, + experimentalFeatures, + buildReasonMessage: buildReasonMessageForEsqlAlert, + mergeSourceAndFields: true, + // passing 1 here since ES|QL does not support pagination + maxNumberOfAlertsMultiplier: 1, + }); + + addToSearchAfterReturn({ current: result, next: bulkCreateResult }); + ruleExecutionLogger.debug( + `Created ${bulkCreateResult.createdItemsCount} alerts. Suppressed ${bulkCreateResult.suppressedItemsCount} alerts` + ); + + if (bulkCreateResult.alertsWereTruncated) { + result.warningMessages.push(getSuppressionMaxSignalsWarning()); + break; + } + } else { + const wrappedAlerts = wrapHits(syntheticHits); + + const enrichAlerts = createEnrichEventsFunction({ + services, + logger: ruleExecutionLogger, + }); + const bulkCreateResult = await bulkCreate( + wrappedAlerts, + tuple.maxSignals - result.createdSignalsCount, + enrichAlerts + ); - if (bulkCreateResult.alertsWereTruncated) { - result.warningMessages.push(getMaxSignalsWarning()); - break; + addToSearchAfterReturn({ current: result, next: bulkCreateResult }); + ruleExecutionLogger.debug(`Created ${bulkCreateResult.createdItemsCount} alerts`); + + if (bulkCreateResult.alertsWereTruncated) { + result.warningMessages.push(getMaxSignalsWarning()); + break; + } } // no more results will be found diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.test.ts new file mode 100644 index 00000000000000..b3bc78e6b9478c --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.test.ts @@ -0,0 +1,156 @@ +/* + * 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 { generateAlertId } from './generate_alert_id'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type { SignalSource } from '../../types'; +import type { CompleteRule, EsqlRuleParams } from '../../../rule_schema'; +import moment from 'moment'; +import { cloneDeep } from 'lodash'; + +const mockEvent: estypes.SearchHit = { + _id: 'test_id', + _version: 2, + _index: 'test_index', +}; + +const mockRule = { + alertId: 'test_alert_id', + ruleParams: { + query: 'from auditbeat*', + }, +} as CompleteRule; + +describe('generateAlertId', () => { + describe('aggregating query', () => { + const aggIdParams = { + event: mockEvent, + spaceId: 'default', + completeRule: mockRule, + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:10:12'), + maxSignals: 100, + }, + isRuleAggregating: true, + index: 10, + }; + + const id = generateAlertId(aggIdParams); + let modifiedIdParams: Parameters['0']; + + beforeEach(() => { + modifiedIdParams = cloneDeep(aggIdParams); + }); + + it('creates id dependant on time range tuple', () => { + modifiedIdParams.tuple.from = moment('2010-10-20 04:20:12'); + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on data row index', () => { + modifiedIdParams.index = 11; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on spaceId', () => { + modifiedIdParams.spaceId = 'test-1'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id not dependant on event._id', () => { + modifiedIdParams.event._id = 'another-id'; + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id not dependant on event._version', () => { + modifiedIdParams.event._version = 100; + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id not dependant on event._index', () => { + modifiedIdParams.event._index = 'packetbeat-*'; + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id dependant on rule alertId', () => { + modifiedIdParams.completeRule.alertId = 'another-alert-id'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on rule query', () => { + modifiedIdParams.completeRule.ruleParams.query = 'from packetbeat*'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + }); + + describe('non-aggregating query', () => { + const nonAggIdParams = { + event: mockEvent, + spaceId: 'default', + completeRule: mockRule, + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:10:12'), + maxSignals: 100, + }, + isRuleAggregating: false, + index: 10, + }; + + const id = generateAlertId(nonAggIdParams); + let modifiedIdParams: Parameters['0']; + + beforeEach(() => { + modifiedIdParams = cloneDeep(nonAggIdParams); + }); + + it('creates id not dependant on time range tuple', () => { + modifiedIdParams.tuple.from = moment('2010-10-20 04:20:12'); + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id not dependant on data row index', () => { + modifiedIdParams.index = 11; + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on spaceId', () => { + modifiedIdParams.spaceId = 'test-1'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on event._id', () => { + modifiedIdParams.event._id = 'another-id'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id dependant on event._version', () => { + modifiedIdParams.event._version = 100; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id dependant on event._index', () => { + modifiedIdParams.event._index = 'packetbeat-*'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + it('creates id dependant on rule alertId', () => { + modifiedIdParams.completeRule.alertId = 'another-alert-id'; + expect(id).not.toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id not dependant on rule query', () => { + modifiedIdParams.completeRule.ruleParams.query = 'from packetbeat*'; + expect(id).toBe(generateAlertId(modifiedIdParams)); + }); + + it('creates id dependant on suppression terms', () => { + modifiedIdParams.suppressionTerms = [{ field: 'agent.name', value: ['test-1'] }]; + const id1 = generateAlertId(modifiedIdParams); + modifiedIdParams.suppressionTerms = [{ field: 'agent.name', value: ['test-2'] }]; + const id2 = generateAlertId(modifiedIdParams); + + expect(id).not.toBe(id1); + expect(id1).not.toBe(id2); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.ts new file mode 100644 index 00000000000000..0f549783f922e5 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/generate_alert_id.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import objectHash from 'object-hash'; +import type { Moment } from 'moment'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; + +import type { CompleteRule, EsqlRuleParams } from '../../../rule_schema'; +import type { SignalSource } from '../../types'; +import type { SuppressionTerm } from '../../utils/suppression_utils'; +/** + * Generates id for ES|QL alert. + * Id is generated as hash of event properties and rule/space config identifiers. + * This would allow to deduplicate alerts, generated from the same event. + */ +export const generateAlertId = ({ + event, + spaceId, + completeRule, + tuple, + isRuleAggregating, + index, + suppressionTerms, +}: { + isRuleAggregating: boolean; + event: estypes.SearchHit; + spaceId: string | null | undefined; + completeRule: CompleteRule; + tuple: { + to: Moment; + from: Moment; + maxSignals: number; + }; + index: number; + suppressionTerms?: SuppressionTerm[]; +}) => { + const ruleRunId = tuple.from.toISOString() + tuple.to.toISOString(); + + return !isRuleAggregating && event._id + ? objectHash([ + event._id, + event._version, + event._index, + `${spaceId}:${completeRule.alertId}`, + ...(suppressionTerms ? [suppressionTerms] : []), + ]) + : objectHash([ + ruleRunId, + completeRule.ruleParams.query, + `${spaceId}:${completeRule.alertId}`, + index, + ]); +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/index.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/index.ts index 061ddfda931745..4b2b842680e32f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/index.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/index.ts @@ -6,3 +6,4 @@ */ export * from './row_to_document'; +export * from './generate_alert_id'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.test.ts new file mode 100644 index 00000000000000..d54f91c0889584 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.test.ts @@ -0,0 +1,94 @@ +/* + * 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 moment from 'moment'; + +import { ALERT_UUID } from '@kbn/rule-data-utils'; +import { getCompleteRuleMock, getEsqlRuleParams } from '../../rule_schema/mocks'; +import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; +import { sampleDocNoSortIdWithTimestamp } from '../__mocks__/es_results'; +import { wrapEsqlAlerts } from './wrap_esql_alerts'; + +import * as esqlUtils from './utils/generate_alert_id'; + +const ruleExecutionLogger = ruleExecutionLogMock.forExecutors.create(); + +const docId = 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71'; +const publicBaseUrl = 'http://somekibanabaseurl.com'; + +const alertSuppression = { + groupBy: ['source.ip'], +}; + +const completeRule = getCompleteRuleMock(getEsqlRuleParams()); +completeRule.ruleParams.alertSuppression = alertSuppression; + +describe('wrapSuppressedEsqlAlerts', () => { + test('should create an alert with the correct _id from a document', () => { + const doc = sampleDocNoSortIdWithTimestamp(docId); + const alerts = wrapEsqlAlerts({ + events: [doc], + isRuleAggregating: false, + spaceId: 'default', + mergeStrategy: 'missingFields', + completeRule, + alertTimestampOverride: undefined, + ruleExecutionLogger, + publicBaseUrl, + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:43:12'), + maxSignals: 100, + }, + }); + + expect(alerts[0]._id).toEqual('ed7fbf575371c898e0f0aea48cdf0bf1865939a9'); + expect(alerts[0]._source[ALERT_UUID]).toEqual('ed7fbf575371c898e0f0aea48cdf0bf1865939a9'); + }); + + test('should call generateAlertId for alert id', () => { + jest.spyOn(esqlUtils, 'generateAlertId').mockReturnValueOnce('mocked-alert-id'); + const completeRuleCloned = cloneDeep(completeRule); + completeRuleCloned.ruleParams.alertSuppression = { + groupBy: ['someKey'], + }; + const doc = sampleDocNoSortIdWithTimestamp(docId); + const alerts = wrapEsqlAlerts({ + events: [doc], + spaceId: 'default', + isRuleAggregating: true, + mergeStrategy: 'missingFields', + completeRule: completeRuleCloned, + alertTimestampOverride: undefined, + ruleExecutionLogger, + publicBaseUrl, + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:43:12'), + maxSignals: 100, + }, + }); + + expect(alerts[0]._id).toEqual('mocked-alert-id'); + expect(alerts[0]._source[ALERT_UUID]).toEqual('mocked-alert-id'); + + expect(esqlUtils.generateAlertId).toHaveBeenCalledWith( + expect.objectContaining({ + completeRule: expect.any(Object), + event: expect.any(Object), + index: 0, + isRuleAggregating: true, + spaceId: 'default', + tuple: { + from: expect.any(Object), + maxSignals: 100, + to: expect.any(Object), + }, + }) + ); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.ts index 6d3493e974668b..b0fa2fd6638fac 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_esql_alerts.ts @@ -5,7 +5,6 @@ * 2.0. */ -import objectHash from 'object-hash'; import type { Moment } from 'moment'; import type * as estypes from '@elastic/elasticsearch/lib/api/types'; @@ -19,9 +18,10 @@ import { buildReasonMessageForNewTermsAlert } from '../utils/reason_formatters'; import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; import { buildBulkBody } from '../factories/utils/build_bulk_body'; import type { SignalSource } from '../types'; +import { generateAlertId } from './utils'; export const wrapEsqlAlerts = ({ - results, + events, spaceId, completeRule, mergeStrategy, @@ -29,12 +29,10 @@ export const wrapEsqlAlerts = ({ ruleExecutionLogger, publicBaseUrl, tuple, - sourceDocuments, isRuleAggregating, }: { isRuleAggregating: boolean; - sourceDocuments: Record; - results: Array>; + events: Array>; spaceId: string | null | undefined; completeRule: CompleteRule; mergeStrategy: ConfigType['alertMergeStrategy']; @@ -47,37 +45,20 @@ export const wrapEsqlAlerts = ({ maxSignals: number; }; }): Array> => { - const wrapped = results.map>((document, i) => { - const ruleRunId = tuple.from.toISOString() + tuple.to.toISOString(); - - // for aggregating rules when metadata _id is present, generate alert based on ES document event id - const id = - !isRuleAggregating && document._id - ? objectHash([ - document._id, - document._version, - document._index, - `${spaceId}:${completeRule.alertId}`, - ]) - : objectHash([ - ruleRunId, - completeRule.ruleParams.query, - `${spaceId}:${completeRule.alertId}`, - i, - ]); - - // metadata fields need to be excluded from source, otherwise alerts creation fails - const { _id, _version, _index, ...source } = document; + const wrapped = events.map>((event, i) => { + const id = generateAlertId({ + event, + spaceId, + completeRule, + tuple, + isRuleAggregating, + index: i, + }); const baseAlert: BaseFieldsLatest = buildBulkBody( spaceId, completeRule, - { - _source: source as SignalSource, - fields: _id ? sourceDocuments[_id]?.fields : undefined, - _id: _id ?? '', - _index: _index ?? '', - }, + event, mergeStrategy, [], true, @@ -91,7 +72,7 @@ export const wrapEsqlAlerts = ({ return { _id: id, - _index: _index ?? '', + _index: event._index ?? '', _source: { ...baseAlert, }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.test.ts new file mode 100644 index 00000000000000..0c3c910efa0566 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.test.ts @@ -0,0 +1,151 @@ +/* + * 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 moment from 'moment'; + +import { + ALERT_URL, + ALERT_UUID, + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_INSTANCE_ID, + ALERT_SUPPRESSION_TERMS, + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_END, +} from '@kbn/rule-data-utils'; +import { getCompleteRuleMock, getEsqlRuleParams } from '../../rule_schema/mocks'; +import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; +import { sampleDocNoSortIdWithTimestamp } from '../__mocks__/es_results'; +import { wrapSuppressedEsqlAlerts } from './wrap_suppressed_esql_alerts'; + +import * as esqlUtils from './utils/generate_alert_id'; + +const ruleExecutionLogger = ruleExecutionLogMock.forExecutors.create(); + +const docId = 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71'; +const publicBaseUrl = 'http://somekibanabaseurl.com'; + +const alertSuppression = { + groupBy: ['source.ip'], +}; + +const completeRule = getCompleteRuleMock(getEsqlRuleParams()); +completeRule.ruleParams.alertSuppression = alertSuppression; + +describe('wrapSuppressedEsqlAlerts', () => { + test('should create an alert with the correct _id from a document and suppression fields', () => { + const doc = sampleDocNoSortIdWithTimestamp(docId); + const alerts = wrapSuppressedEsqlAlerts({ + events: [doc], + isRuleAggregating: false, + spaceId: 'default', + mergeStrategy: 'missingFields', + completeRule, + alertTimestampOverride: undefined, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp: '@timestamp', + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:43:12'), + maxSignals: 100, + }, + }); + + expect(alerts[0]._id).toEqual('d94fb11e6062d7dce881ea07d952a1280398663a'); + expect(alerts[0]._source[ALERT_UUID]).toEqual('d94fb11e6062d7dce881ea07d952a1280398663a'); + expect(alerts[0]._source[ALERT_URL]).toContain( + 'http://somekibanabaseurl.com/app/security/alerts/redirect/d94fb11e6062d7dce881ea07d952a1280398663a?index=.alerts-security.alerts-default' + ); + expect(alerts[0]._source[ALERT_SUPPRESSION_DOCS_COUNT]).toEqual(0); + expect(alerts[0]._source[ALERT_INSTANCE_ID]).toEqual( + '1bf77f90e72d76d9335ad0ce356340a3d9833f96' + ); + expect(alerts[0]._source[ALERT_SUPPRESSION_TERMS]).toEqual([ + { field: 'source.ip', value: ['127.0.0.1'] }, + ]); + expect(alerts[0]._source[ALERT_SUPPRESSION_START]).toBeDefined(); + expect(alerts[0]._source[ALERT_SUPPRESSION_END]).toBeDefined(); + }); + + test('should create an alert with a different _id if suppression field is different', () => { + const completeRuleCloned = cloneDeep(completeRule); + completeRuleCloned.ruleParams.alertSuppression = { + groupBy: ['someKey'], + }; + const doc = sampleDocNoSortIdWithTimestamp(docId); + const alerts = wrapSuppressedEsqlAlerts({ + events: [doc], + spaceId: 'default', + isRuleAggregating: true, + mergeStrategy: 'missingFields', + completeRule: completeRuleCloned, + alertTimestampOverride: undefined, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp: '@timestamp', + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:43:12'), + maxSignals: 100, + }, + }); + + expect(alerts[0]._source[ALERT_URL]).toContain( + 'http://somekibanabaseurl.com/app/security/alerts/redirect/' + ); + expect(alerts[0]._source[ALERT_SUPPRESSION_DOCS_COUNT]).toEqual(0); + expect(alerts[0]._source[ALERT_INSTANCE_ID]).toEqual( + 'c88edd552cb3501f040aea63ec68312e71af2ed2' + ); + expect(alerts[0]._source[ALERT_SUPPRESSION_TERMS]).toEqual([ + { field: 'someKey', value: 'someValue' }, + ]); + }); + + test('should call generateAlertId for alert id', () => { + jest.spyOn(esqlUtils, 'generateAlertId').mockReturnValueOnce('mocked-alert-id'); + const completeRuleCloned = cloneDeep(completeRule); + completeRuleCloned.ruleParams.alertSuppression = { + groupBy: ['someKey'], + }; + const doc = sampleDocNoSortIdWithTimestamp(docId); + const alerts = wrapSuppressedEsqlAlerts({ + events: [doc], + spaceId: 'default', + isRuleAggregating: false, + mergeStrategy: 'missingFields', + completeRule: completeRuleCloned, + alertTimestampOverride: undefined, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp: '@timestamp', + tuple: { + to: moment('2010-10-20 04:43:12'), + from: moment('2010-10-20 04:43:12'), + maxSignals: 100, + }, + }); + + expect(alerts[0]._id).toEqual('mocked-alert-id'); + expect(alerts[0]._source[ALERT_UUID]).toEqual('mocked-alert-id'); + + expect(esqlUtils.generateAlertId).toHaveBeenCalledWith( + expect.objectContaining({ + completeRule: expect.any(Object), + event: expect.any(Object), + index: 0, + isRuleAggregating: false, + spaceId: 'default', + tuple: { + from: expect.any(Object), + maxSignals: 100, + to: expect.any(Object), + }, + }) + ); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts new file mode 100644 index 00000000000000..057cd5c9061679 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts @@ -0,0 +1,111 @@ +/* + * 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 objectHash from 'object-hash'; +import type { Moment } from 'moment'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import { TIMESTAMP } from '@kbn/rule-data-utils'; +import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; + +import type { + BaseFieldsLatest, + WrappedFieldsLatest, +} from '../../../../../common/api/detection_engine/model/alerts'; +import type { ConfigType } from '../../../../config'; +import type { CompleteRule, EsqlRuleParams } from '../../rule_schema'; +import { buildReasonMessageForNewTermsAlert } from '../utils/reason_formatters'; +import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; +import { buildBulkBody } from '../factories/utils/build_bulk_body'; +import type { SignalSource } from '../types'; +import { getSuppressionAlertFields, getSuppressionTerms } from '../utils'; +import { generateAlertId } from './utils'; + +export const wrapSuppressedEsqlAlerts = ({ + events, + spaceId, + completeRule, + mergeStrategy, + alertTimestampOverride, + ruleExecutionLogger, + publicBaseUrl, + tuple, + isRuleAggregating, + primaryTimestamp, + secondaryTimestamp, +}: { + isRuleAggregating: boolean; + events: Array>; + spaceId: string | null | undefined; + completeRule: CompleteRule; + mergeStrategy: ConfigType['alertMergeStrategy']; + alertTimestampOverride: Date | undefined; + ruleExecutionLogger: IRuleExecutionLogForExecutors; + publicBaseUrl: string | undefined; + tuple: { + to: Moment; + from: Moment; + maxSignals: number; + }; + primaryTimestamp: string; + secondaryTimestamp?: string; +}): Array> => { + const wrapped = events.map>( + (event, i) => { + const combinedFields = { ...event?.fields, ...event._source }; + + const suppressionTerms = getSuppressionTerms({ + alertSuppression: completeRule?.ruleParams?.alertSuppression, + fields: combinedFields, + }); + + const id = generateAlertId({ + event, + spaceId, + completeRule, + tuple, + isRuleAggregating, + index: i, + suppressionTerms, + }); + + const instanceId = objectHash([suppressionTerms, completeRule.alertId, spaceId]); + + const baseAlert: BaseFieldsLatest = buildBulkBody( + spaceId, + completeRule, + event, + mergeStrategy, + [], + true, + buildReasonMessageForNewTermsAlert, + [], + alertTimestampOverride, + ruleExecutionLogger, + id, + publicBaseUrl + ); + + return { + _id: id, + _index: event._index ?? '', + _source: { + ...baseAlert, + ...getSuppressionAlertFields({ + primaryTimestamp, + secondaryTimestamp, + fields: combinedFields, + suppressionTerms, + fallbackTimestamp: baseAlert[TIMESTAMP], + instanceId, + }), + }, + }; + } + ); + + return wrapped; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/bulk_create_suppressed_alerts_in_memory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/bulk_create_suppressed_alerts_in_memory.ts index 2fffa07f8d6846..efa8e95c522a56 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/bulk_create_suppressed_alerts_in_memory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/bulk_create_suppressed_alerts_in_memory.ts @@ -87,7 +87,7 @@ export const bulkCreateSuppressedNewTermsAlertsInMemory = async ({ const partitionedEvents = partitionMissingFieldsEvents( eventsAndTerms, alertSuppression?.groupBy || [], - ['event'] + ['event', 'fields'] ); unsuppressibleWrappedDocs = wrapHits(partitionedEvents[1]); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts index 85bfc76e964e25..030cb213d94ddd 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts @@ -51,6 +51,8 @@ export interface BulkCreateSuppressedAlertsParams enrichedEvents: SignalSourceHit[]; toReturn: SearchAfterAndBulkCreateReturnType; experimentalFeatures: ExperimentalFeatures; + mergeSourceAndFields?: boolean; + maxNumberOfAlertsMultiplier?: number; } /** * wraps, bulk create and suppress alerts in memory, also takes care of missing fields logic. @@ -70,6 +72,8 @@ export const bulkCreateSuppressedAlertsInMemory = async ({ alertWithSuppression, alertTimestampOverride, experimentalFeatures, + mergeSourceAndFields = false, + maxNumberOfAlertsMultiplier, }: BulkCreateSuppressedAlertsParams) => { const suppressOnMissingFields = (alertSuppression?.missingFieldsStrategy ?? DEFAULT_SUPPRESSION_MISSING_FIELDS_STRATEGY) === @@ -81,7 +85,9 @@ export const bulkCreateSuppressedAlertsInMemory = async ({ if (!suppressOnMissingFields) { const partitionedEvents = partitionMissingFieldsEvents( enrichedEvents, - alertSuppression?.groupBy || [] + alertSuppression?.groupBy || [], + ['fields'], + mergeSourceAndFields ); unsuppressibleWrappedDocs = wrapHits(partitionedEvents[1], buildReasonMessage); @@ -102,6 +108,7 @@ export const bulkCreateSuppressedAlertsInMemory = async ({ alertWithSuppression, alertTimestampOverride, experimentalFeatures, + maxNumberOfAlertsMultiplier, }); }; @@ -120,6 +127,7 @@ export interface ExecuteBulkCreateAlertsParams>; toReturn: SearchAfterAndBulkCreateReturnType; experimentalFeatures: ExperimentalFeatures; + maxNumberOfAlertsMultiplier?: number; } /** @@ -139,11 +147,12 @@ export const executeBulkCreateAlerts = async < alertWithSuppression, alertTimestampOverride, experimentalFeatures, + maxNumberOfAlertsMultiplier = MAX_SIGNALS_SUPPRESSION_MULTIPLIER, }: ExecuteBulkCreateAlertsParams) => { // max signals for suppression includes suppressed and created alerts // this allows to lift max signals limitation to higher value // and can detects events beyond default max_signals value - const suppressionMaxSignals = MAX_SIGNALS_SUPPRESSION_MULTIPLIER * tuple.maxSignals; + const suppressionMaxSignals = maxNumberOfAlertsMultiplier * tuple.maxSignals; const suppressionDuration = alertSuppression?.duration; const suppressionWindow = suppressionDuration diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.test.ts index dfee32a058ba6d..7fad1d4f2b10cb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.test.ts @@ -30,7 +30,8 @@ describe('partitionMissingFieldsEvents', () => { _index: 'index-0', }, ], - ['agent.host', 'agent.type', 'agent.version'] + ['agent.host', 'agent.type', 'agent.version'], + ['fields'] ) ).toEqual([ [ @@ -83,7 +84,7 @@ describe('partitionMissingFieldsEvents', () => { }, ], ['agent.host', 'agent.type', 'agent.version'], - ['event'] + ['event', 'fields'] ) ).toEqual([ [ @@ -113,6 +114,35 @@ describe('partitionMissingFieldsEvents', () => { ], ]); }); + it('should partition when fields located in root of event', () => { + expect( + partitionMissingFieldsEvents( + [ + { + 'agent.host': 'host-1', + 'agent.version': 2, + }, + { + 'agent.host': 'host-1', + }, + ], + ['agent.host', 'agent.version'], + [] + ) + ).toEqual([ + [ + { + 'agent.host': 'host-1', + 'agent.version': 2, + }, + ], + [ + { + 'agent.host': 'host-1', + }, + ], + ]); + }); it('should partition if two fields are empty', () => { expect( partitionMissingFieldsEvents( @@ -125,7 +155,8 @@ describe('partitionMissingFieldsEvents', () => { _index: 'index-0', }, ], - ['agent.host', 'agent.type', 'agent.version'] + ['agent.host', 'agent.type', 'agent.version'], + ['fields'] ) ).toEqual([ [], @@ -152,7 +183,8 @@ describe('partitionMissingFieldsEvents', () => { _index: 'index-0', }, ], - ['agent.host', 'agent.type', 'agent.version'] + ['agent.host', 'agent.type', 'agent.version'], + ['fields'] ) ).toEqual([ [], diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.ts index f86a969dc60c30..901768fe5c7737 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/partition_missing_fields_events.ts @@ -17,20 +17,25 @@ import type { SignalSourceHit } from '../types'; * 2. where any of fields is empty */ export const partitionMissingFieldsEvents = < - T extends SignalSourceHit | { event: SignalSourceHit } + T extends SignalSourceHit | { event: SignalSourceHit } | Record >( events: T[], suppressedBy: string[] = [], // path to fields property within event object. At this point, it can be in root of event object or within event key - fieldsPath: ['event'] | [] = [] + fieldsPath: ['event', 'fields'] | ['fields'] | [] = [], + mergeSourceAndFields: boolean = false ): T[][] => { return partition(events, (event) => { if (suppressedBy.length === 0) { return true; } - const eventFields = get(event, [...fieldsPath, 'fields']); - const hasMissingFields = - Object.keys(pick(eventFields, suppressedBy)).length < suppressedBy.length; + const eventFields = fieldsPath.length ? get(event, fieldsPath) : event; + const sourceFields = + (event as SignalSourceHit)?._source || (event as { event: SignalSourceHit })?.event?._source; + + const fields = mergeSourceAndFields ? { ...sourceFields, ...eventFields } : eventFields; + + const hasMissingFields = Object.keys(pick(fields, suppressedBy)).length < suppressedBy.length; return !hasMissingFields; }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts index 167f22dc1d52b2..44febba73e68e7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts @@ -17,7 +17,8 @@ import { ALERT_SUPPRESSION_END, } from '@kbn/rule-data-utils'; import type { AlertSuppressionCamel } from '../../../../../common/api/detection_engine/model/rule_schema'; -interface SuppressionTerm { + +export interface SuppressionTerm { field: string; value: string[] | number[] | null; } @@ -33,7 +34,7 @@ export const getSuppressionAlertFields = ({ fallbackTimestamp, instanceId, }: { - fields: Record | undefined; + fields: Record | undefined; primaryTimestamp: string; secondaryTimestamp?: string; suppressionTerms: SuppressionTerm[]; diff --git a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts index cc47b97377e6ce..d134546c6f6335 100644 --- a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts +++ b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts @@ -80,6 +80,7 @@ export function createTestConfig(options: CreateTestConfigOptions, testFiles?: s '--xpack.ruleRegistry.unsafe.legacyMultiTenancy.enabled=true', `--xpack.securitySolution.enableExperimental=${JSON.stringify([ 'previewTelemetryUrlEnabled', + 'alertSuppressionForEsqlRuleEnabled', 'riskScoringPersistence', 'riskScoringRoutesEnabled', 'bulkCustomHighlightedFieldsEnabled', diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/configs/serverless.config.ts index f6ba7fa49895ee..76c73ff71cc181 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/configs/serverless.config.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/configs/serverless.config.ts @@ -19,6 +19,7 @@ export default createTestConfig({ ])}`, // See tests within the file "ignore_fields.ts" which use these values in "alertIgnoreFields" `--xpack.securitySolution.enableExperimental=${JSON.stringify([ 'bulkCustomHighlightedFieldsEnabled', + 'alertSuppressionForEsqlRuleEnabled', ])}`, ], }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/esql_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/esql_suppression.ts new file mode 100644 index 00000000000000..f7264e064bdbae --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/esql_suppression.ts @@ -0,0 +1,2025 @@ +/* + * 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 sortBy from 'lodash/sortBy'; +import expect from 'expect'; +import { v4 as uuidv4 } from 'uuid'; + +import { + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_END, + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_SUPPRESSION_TERMS, + ALERT_LAST_DETECTED, + TIMESTAMP, + ALERT_START, +} from '@kbn/rule-data-utils'; +import { EsqlRuleCreateProps } from '@kbn/security-solution-plugin/common/api/detection_engine/model/rule_schema'; +import { getCreateEsqlRulesSchemaMock } from '@kbn/security-solution-plugin/common/api/detection_engine/model/rule_schema/mocks'; +import { RuleExecutionStatusEnum } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_monitoring'; +import { ALERT_ORIGINAL_TIME } from '@kbn/security-solution-plugin/common/field_maps/field_names'; +import { DETECTION_ENGINE_SIGNALS_STATUS_URL as DETECTION_ENGINE_ALERTS_STATUS_URL } from '@kbn/security-solution-plugin/common/constants'; +import { getSuppressionMaxSignalsWarning as getSuppressionMaxAlertsWarning } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_types/utils/utils'; + +import { ENABLE_ASSET_CRITICALITY_SETTING } from '@kbn/security-solution-plugin/common/constants'; +import { + getPreviewAlerts, + previewRule, + getOpenAlerts, + dataGeneratorFactory, + previewRuleWithExceptionEntries, + setAlertStatus, + patchRule, +} from '../../../../utils'; +import { + deleteAllRules, + deleteAllAlerts, + createRule, +} from '../../../../../../../common/utils/security_solution'; +import { deleteAllExceptions } from '../../../../../lists_and_exception_lists/utils'; +import { FtrProviderContext } from '../../../../../../ftr_provider_context'; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + const es = getService('es'); + const log = getService('log'); + const kibanaServer = getService('kibanaServer'); + const { indexEnhancedDocuments, indexListOfDocuments, indexGeneratedDocuments } = + dataGeneratorFactory({ + es, + index: 'ecs_compliant', + log, + }); + + /** + * to separate docs between rules runs + */ + const internalIdPipe = (id: string) => `| where id=="${id}"`; + + const getNonAggRuleQueryWithMetadata = (id: string) => + `from ecs_compliant metadata _id, _index, _version ${internalIdPipe(id)}`; + + // skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled + describe('@ess @serverless @skipInServerlessMKI ES|QL rule type, alert suppression', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + await deleteAllAlerts(supertest, log, es); + await deleteAllRules(supertest, log); + }); + + it('should suppress an alert during real rule executions', async () => { + const id = uuidv4(); + const firstTimestamp = new Date().toISOString(); + + const firstExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + + await indexListOfDocuments(firstExecutionDocuments); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 300, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits.length).toBe(1); + expect(alerts.hits.hits[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + // suppression boundaries equal to original event time, since no alert been suppressed + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: firstTimestamp, + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }) + ); + + const secondTimestamp = new Date().toISOString(); + const secondExecutionDocuments = [ + { + host: { name: 'host-0', ip: '127.0.0.5' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + // Add a new document, then disable and re-enable to trigger another rule run. The second doc should + // trigger an update to the existing alert without changing the timestamp + await indexListOfDocuments(secondExecutionDocuments); + + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + expect(secondAlerts.hits.hits.length).toEqual(1); + expect(secondAlerts.hits.hits[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, // timestamp is the same + [ALERT_SUPPRESSION_START]: firstTimestamp, // suppression start is the same + [ALERT_SUPPRESSION_END]: secondTimestamp, // suppression end is updated + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, + }) + ); + }); + + it('should NOT suppress and update an alert if the alert is closed', async () => { + const id = uuidv4(); + const firstTimestamp = new Date().toISOString(); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 300, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const firstExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + + await indexListOfDocuments(firstExecutionDocuments); + + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + expect(alerts.hits.hits).toHaveLength(1); + // Close the alert. Subsequent rule executions should ignore this closed alert + // for suppression purposes. + const alertIds = alerts.hits.hits.map((alert) => alert._id); + await supertest + .post(DETECTION_ENGINE_ALERTS_STATUS_URL) + .set('kbn-xsrf', 'true') + .send(setAlertStatus({ alertIds, status: 'closed' })) + .expect(200); + + const secondTimestamp = new Date().toISOString(); + const secondExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + // Add new documents, then disable and re-enable to trigger another rule run. The second doc should + // trigger a new alert since the first one is now closed. + await indexListOfDocuments(secondExecutionDocuments); + + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + expect(secondAlerts.hits.hits.length).toEqual(1); + expect(alerts.hits.hits[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }) + ); + }); + + it('should NOT suppress alerts when suppression period is less than rule interval', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:15:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 10, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toBe(2); + expect(previewAlerts[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + [TIMESTAMP]: '2020-10-28T06:00:00.000Z', + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: firstTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }) + ); + + expect(previewAlerts[1]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + [TIMESTAMP]: '2020-10-28T06:30:00.000Z', + [ALERT_SUPPRESSION_START]: secondTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }) + ); + }); + + it('should suppress alerts in the time window that covers 3 rule executions', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:15:00.000Z'; + const thirdTimestamp = '2020-10-28T06:45:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + { + host: { name: 'host-0' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + const thirdExecutionDocuments = [ + { + host: { name: 'host-0' }, + id, + '@timestamp': thirdTimestamp, + }, + ]; + + await indexListOfDocuments([ + ...firstExecutionDocuments, + ...secondExecutionDocuments, + ...thirdExecutionDocuments, + ]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 2, + unit: 'h', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 3, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-0', + }, + ], + [TIMESTAMP]: '2020-10-28T06:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', // Note: ALERT_LAST_DETECTED gets updated, timestamp does not + [ALERT_START]: '2020-10-28T06:00:00.000Z', + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: thirdTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, // in total 3 alert got suppressed: 1 from the first run, 1 from the second, 1 from the third + }); + }); + + it('should suppress the correct alerts based on multi values group_by', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:15:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + 'agent.version': 1, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + 'agent.version': 2, + }, + { + host: { name: 'host-b' }, + id, + '@timestamp': firstTimestamp, + 'agent.version': 2, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + 'agent.version': 1, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant metadata _id, _index, _version ${internalIdPipe( + id + )} | where host.name=="host-a"`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name', 'agent.version'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', 'agent.version', ALERT_ORIGINAL_TIME], + }); + // 3 alerts should be generated: + // 1. for pair 'host-a', 1 - suppressed + // 2. for pair 'host-a', 2 - not suppressed + expect(previewAlerts.length).toEqual(2); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + { + field: 'agent.version', + value: '1', + }, + ], + [TIMESTAMP]: '2020-10-28T06:00:00.000Z', + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + expect(previewAlerts[1]._source).toEqual({ + ...previewAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + { + field: 'agent.version', + value: '2', + }, + ], + [TIMESTAMP]: '2020-10-28T06:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T06:00:00.000Z', + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: firstTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // no suppressed alerts + }); + }); + + it('should correctly suppress when using a timestamp override', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const docWithoutOverride = { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }; + const docWithOverride = { + ...docWithoutOverride, + host: { name: 'host-a' }, + // This simulates a very late arriving doc + '@timestamp': '2020-10-28T03:00:00.000Z', + event: { + ingested: secondTimestamp, + }, + }; + + await indexListOfDocuments([docWithoutOverride, docWithOverride]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + timestamp_override: 'event.ingested', + }; + + // 1 alert should be suppressed, based on event.ingested value of a document + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('should deduplicate multiple alerts while suppressing new ones', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + // large look-back time covers all docs + from: 'now-1h', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 4, + }); + }); + + it('should suppress alerts with missing fields', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a', ip: '127.0.0.3' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a', ip: '127.0.0.4' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { ip: '127.0.0.5' }, // doc 1 with missing host.name field + }, + { + id, + '@timestamp': firstTimestamp, + host: { ip: '127.0.0.6' }, // doc 2 with missing host.name field + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a', ip: '127.0.0.10' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { ip: '127.0.0.11' }, // doc 3 with missing host.name field + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(2); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + expect(previewAlerts[1]._source).toEqual({ + ...previewAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('should not suppress alerts with missing fields if configured so', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a', ip: '127.0.0.3' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a', ip: '127.0.0.4' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { ip: '127.0.0.5' }, // doc 1 with missing host.name field + }, + { + id, + '@timestamp': firstTimestamp, + host: { ip: '127.0.0.6' }, // doc 2 with missing host.name field + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a', ip: '127.0.0.10' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { ip: '127.0.0.11' }, // doc 3 with missing host.name field + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'doNotSuppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(4); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + // rest of alerts are not suppressed and do not have suppress properties + previewAlerts.slice(1).forEach((previewAlert) => { + const source = previewAlert._source; + expect(source).toHaveProperty('id', id); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_END); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_TERMS); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + }); + }); + + it('should suppress alerts for aggregating queries', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant ${internalIdPipe( + id + )} | stats counted_agents=count(host.name) by host.name`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_START]: '2020-10-28T06:00:00.000Z', // since aggregation query results do not have timestamp properties suppression boundary start set as a first execution time + [ALERT_SUPPRESSION_END]: '2020-10-28T06:30:00.000Z', // since aggregation query results do not have timestamp properties suppression boundary end set as a second execution time + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, // only one suppressed alert, since aggregation query produces one alert per rule execution, no matter how many events aggregated + }); + expect(previewAlerts[0]._source).not.toHaveProperty(ALERT_ORIGINAL_TIME); + }); + + it('should suppress alerts by custom field, created in ES|QL query', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-b' }, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'test-c' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-d' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'test-s' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + // ES|QL query creates new field custom_field - prefix_host, prefix_test + query: `from ecs_compliant metadata _id ${internalIdPipe( + id + )} | eval custom_field=concat("prefix_", left(host.name, 4))`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['custom_field'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + }); + // lodash sortBy is used here because custom_field is non ECS and not mapped in alerts index, so can't be sorted by + const sortedAlerts = sortBy(previewAlerts, 'custom_field'); + expect(previewAlerts.length).toEqual(2); + + expect(sortedAlerts[0]._source).toEqual({ + ...sortedAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'custom_field', + value: 'prefix_host', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + expect(sortedAlerts[1]._source).toEqual({ + ...sortedAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'custom_field', + value: 'prefix_test', + }, + ], + [ALERT_ORIGINAL_TIME]: secondTimestamp, + [ALERT_SUPPRESSION_START]: secondTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('should suppress alerts by custom field, created in ES|QL query, when do not suppress missing fields configured', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-b' }, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'test-c' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-d' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'test-s' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + // ES|QL query creates new field custom_field - prefix_host, prefix_test + query: `from ecs_compliant metadata _id ${internalIdPipe( + id + )} | eval custom_field=concat("prefix_", left(host.name, 4))`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['custom_field'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'doNotSuppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + }); + // lodash sortBy is used here because custom_field is non ECS and not mapped in alerts index, so can't be sorted by + const sortedAlerts = sortBy(previewAlerts, 'custom_field'); + expect(previewAlerts.length).toEqual(2); + + expect(sortedAlerts[0]._source).toEqual({ + ...sortedAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'custom_field', + value: 'prefix_host', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + expect(sortedAlerts[1]._source).toEqual({ + ...sortedAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'custom_field', + value: 'prefix_test', + }, + ], + [ALERT_ORIGINAL_TIME]: secondTimestamp, + [ALERT_SUPPRESSION_START]: secondTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('should suppress by field, dropped in ES|QL query, but returned from source index', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant metadata _id ${internalIdPipe(id)} | drop host.name`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: ['host-a'], + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + // even when field is dropped in ES|QL query it is returned from source document + it('should not suppress alerts by field, dropped in ES|QL query, when do not suppress missing fields configured', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }, + { + id, + '@timestamp': firstTimestamp, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + id, + '@timestamp': firstTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant metadata _id ${internalIdPipe(id)} | drop host.name`, + from: 'now-35m', + interval: '30m', + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 60, + unit: 'm', + }, + missing_fields_strategy: 'doNotSuppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(3); + + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: ['host-a'], + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + // rest of alerts are not suppressed and do not have suppress properties + previewAlerts.slice(1).forEach((previewAlert) => { + const source = previewAlert._source; + expect(source).toHaveProperty('id', id); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_END); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_TERMS); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + }); + }); + + describe('rule execution only', () => { + it('should suppress alerts during rule execution only', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + const laterTimestamp = '2020-10-28T06:50:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': laterTimestamp, + }, + // does not generate alert + { + host: { name: 'host-b' }, + id, + '@timestamp': laterTimestamp, + }, + ]; + + await indexListOfDocuments(firstExecutionDocuments); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant metadata _id, _index, _version ${internalIdPipe( + id + )} | where host.name=="host-a"`, + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_ORIGINAL_TIME]: timestamp, + [ALERT_SUPPRESSION_START]: timestamp, + [ALERT_SUPPRESSION_END]: laterTimestamp, // suppression ends with later timestamp + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('should suppress alerts per rule execution for array field', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: ['host-a', 'host-b'] }, + id, + '@timestamp': timestamp, + }, + { + host: { name: ['host-a', 'host-b'] }, + id, + '@timestamp': timestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: ['host-a', 'host-b'], + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_ORIGINAL_TIME]: timestamp, + [ALERT_SUPPRESSION_START]: timestamp, + [ALERT_SUPPRESSION_END]: timestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('should suppress alerts with missing fields during rule execution only for multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + + const firstExecutionDocuments = [ + // no missing fields + { + host: { name: 'host-a', ip: '127.0.0.11' }, + agent: { name: 'agent-a', version: 10 }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.12' }, + agent: { name: 'agent-a', version: 10 }, + id, + '@timestamp': timestamp, + }, + // missing agent.name + { + host: { name: 'host-a', ip: '127.0.0.21' }, + agent: { version: 10 }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.22' }, + agent: { version: 10 }, + id, + '@timestamp': timestamp, + }, + // missing agent.version + { + host: { name: 'host-a', ip: '127.0.0.31' }, + agent: { name: 'agent-a' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.32' }, + agent: { name: 'agent-a' }, + id, + '@timestamp': timestamp, + }, + // missing both agent.* + { + host: { name: 'host-a', ip: '127.0.0.41' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.42' }, + id, + '@timestamp': timestamp, + }, + ]; + + await indexListOfDocuments(firstExecutionDocuments); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['agent.name', 'agent.version', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(4); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: '10', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + expect(previewAlerts[1]._source).toEqual({ + ...previewAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + expect(previewAlerts[2]._source).toEqual({ + ...previewAlerts[2]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: '10', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + expect(previewAlerts[3]._source).toEqual({ + ...previewAlerts[3]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('should not suppress alerts with missing fields during rule execution only if configured so for multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + + const firstExecutionDocuments = [ + // no missing fields + { + host: { name: 'host-a', ip: '127.0.0.11' }, + agent: { name: 'agent-a', version: 10 }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.12' }, + agent: { name: 'agent-a', version: 10 }, + id, + '@timestamp': timestamp, + }, + // missing agent.name + { + host: { name: 'host-a', ip: '127.0.0.21' }, + agent: { version: 10 }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.22' }, + agent: { version: 10 }, + id, + '@timestamp': timestamp, + }, + // missing agent.version + { + host: { name: 'host-a', ip: '127.0.0.31' }, + agent: { name: 'agent-a' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.32' }, + agent: { name: 'agent-a' }, + id, + '@timestamp': timestamp, + }, + // missing both agent.* + { + host: { name: 'host-a', ip: '127.0.0.41' }, + id, + '@timestamp': timestamp, + }, + { + host: { name: 'host-a', ip: '127.0.0.42' }, + id, + '@timestamp': timestamp, + }, + ]; + + await indexListOfDocuments(firstExecutionDocuments); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['agent.name', 'agent.version', ALERT_ORIGINAL_TIME], + }); + // from 8 injected, only one should be suppressed + expect(previewAlerts.length).toEqual(7); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: '10', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + // rest of alerts are not suppressed and do not have suppress properties + previewAlerts.slice(1).forEach((previewAlert) => { + const source = previewAlert._source; + expect(source).toHaveProperty('id', id); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_END); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_TERMS); + expect(source).not.toHaveProperty(ALERT_SUPPRESSION_DOCS_COUNT); + }); + }); + + it('should deduplicate alerts while suppressing new ones on rule execution', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + const firstExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': firstTimestamp, + }, + ]; + const secondExecutionDocuments = [ + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + { + host: { name: 'host-a' }, + id, + '@timestamp': secondTimestamp, + }, + ]; + + await indexListOfDocuments([...firstExecutionDocuments, ...secondExecutionDocuments]); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + // large look-back time covers all docs + from: 'now-1h', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(2); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: firstTimestamp, + [ALERT_SUPPRESSION_START]: firstTimestamp, + [ALERT_SUPPRESSION_END]: firstTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + expect(previewAlerts[1]._source).toEqual({ + ...previewAlerts[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_ORIGINAL_TIME]: secondTimestamp, + [ALERT_SUPPRESSION_START]: secondTimestamp, + [ALERT_SUPPRESSION_END]: secondTimestamp, + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('should not suppress more than limited number of alerts (max_signals)', async () => { + const id = uuidv4(); + + await indexGeneratedDocuments({ + docsCount: 12000, + seed: (index) => ({ + id, + '@timestamp': `2020-10-28T06:50:00.${index}Z`, + host: { + name: `host-${index}`, + }, + agent: { name: 'agent-a' }, + }), + }); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant metadata _id, _index, _version ${internalIdPipe( + id + )} | sort @timestamp asc`, + alert_suppression: { + group_by: ['agent.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + max_signals: 200, + }; + + const { previewId, logs } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + + expect(logs[0].warnings).toEqual( + expect.arrayContaining([getSuppressionMaxAlertsWarning()]) + ); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['agent.name', ALERT_ORIGINAL_TIME], + size: 1000, + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 200, + }); + }); + + it('should generate up to max_signals alerts', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:05:00.000Z'; + + await indexGeneratedDocuments({ + docsCount: 20000, + seed: (index) => ({ + id, + '@timestamp': timestamp, + host: { + name: `host-${index}`, + }, + 'agent.name': `agent-${index}`, + }), + }); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: getNonAggRuleQueryWithMetadata(id), + alert_suppression: { + group_by: ['agent.name'], + duration: { + value: 300, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + max_signals: 150, + }; + + const { previewId, logs } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 1, + }); + expect(logs[0].warnings).toEqual( + expect.arrayContaining([getSuppressionMaxAlertsWarning()]) + ); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 1000, + sort: ['agent.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(150); + }); + }); + + describe('with exceptions', async () => { + afterEach(async () => { + await deleteAllExceptions(supertest, log); + }); + + it('should apply exceptions', async () => { + const id = uuidv4(); + const interval: [string, string] = ['2020-10-28T06:00:00.000Z', '2020-10-28T06:10:00.000Z']; + const doc1 = { agent: { name: 'test-1' }, 'client.ip': '127.0.0.2' }; + const doc2 = { agent: { name: 'test-1' } }; + const doc3 = { agent: { name: 'test-1' }, 'client.ip': '127.0.0.1' }; + + await indexEnhancedDocuments({ documents: [doc1, doc2, doc3], interval, id }); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant ${internalIdPipe(id)} | where agent.name=="test-1"`, + from: 'now-1h', + interval: '1h', + alert_suppression: { + group_by: ['agent.name'], + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRuleWithExceptionEntries({ + supertest, + log, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + entries: [ + [ + { + field: 'client.ip', + operator: 'included', + type: 'match', + value: '127.0.0.1', + }, + ], + ], + }); + + const previewAlerts = await getPreviewAlerts({ es, previewId }); + + expect(previewAlerts.length).toBe(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'test-1', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + }); + + describe('alerts enrichment', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/entity/risks'); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/entity/risks'); + }); + + it('should be enriched with host risk score', async () => { + const id = uuidv4(); + const interval: [string, string] = ['2020-10-28T06:00:00.000Z', '2020-10-28T06:10:00.000Z']; + const doc1 = { host: { name: 'host-0' } }; + + await indexEnhancedDocuments({ documents: [doc1, doc1], interval, id }); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant ${internalIdPipe(id)} | where host.name=="host-0"`, + from: 'now-1h', + interval: '1h', + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + }); + + const previewAlerts = await getPreviewAlerts({ es, previewId }); + + expect(previewAlerts.length).toBe(1); + + expect(previewAlerts[0]._source).toHaveProperty('host.risk.calculated_level', 'Low'); + expect(previewAlerts[0]._source).toHaveProperty('host.risk.calculated_score_norm', 1); + }); + }); + + describe('with asset criticality', async () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/asset_criticality'); + await kibanaServer.uiSettings.update({ + [ENABLE_ASSET_CRITICALITY_SETTING]: true, + }); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/asset_criticality'); + }); + + it('should be enriched alert with criticality_level', async () => { + const id = uuidv4(); + const interval: [string, string] = ['2020-10-28T06:00:00.000Z', '2020-10-28T06:10:00.000Z']; + const doc1 = { host: { name: 'host-0' } }; + + await indexEnhancedDocuments({ documents: [doc1, doc1], interval, id }); + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant ${internalIdPipe(id)} | where host.name=="host-0"`, + from: 'now-1h', + interval: '1h', + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + }); + + const previewAlerts = await getPreviewAlerts({ es, previewId }); + + expect(previewAlerts.length).toBe(1); + + expect(previewAlerts[0]?._source?.['host.asset.criticality']).toBe('extreme_impact'); + }); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts index 329cef4ac7e8c9..3ea2c4e6c93596 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/index.ts @@ -12,6 +12,7 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./eql')); loadTestFile(require.resolve('./eql_alert_suppression')); loadTestFile(require.resolve('./esql')); + loadTestFile(require.resolve('./esql_suppression')); loadTestFile(require.resolve('./machine_learning')); loadTestFile(require.resolve('./new_terms')); loadTestFile(require.resolve('./new_terms_alert_suppression')); diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index 588843b731f456..606df49c4f90ee 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -45,6 +45,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { '--xpack.alerting.rules.minimumScheduleInterval.value=1s', '--xpack.ruleRegistry.unsafe.legacyMultiTenancy.enabled=true', `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForEsqlRuleEnabled', 'bulkCustomHighlightedFieldsEnabled', ])}`, // mock cloud to enable the guided onboarding tour in e2e tests diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_suppression_serverless_essentials.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_suppression_serverless_essentials.cy.ts index 62a406cd9d4662..d6f23687cf4180 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_suppression_serverless_essentials.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_suppression_serverless_essentials.cy.ts @@ -9,6 +9,7 @@ import { selectThresholdRuleType, selectIndicatorMatchType, selectNewTermsRuleType, + selectEsqlRuleType, } from '../../../../tasks/create_new_rule'; import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; @@ -21,6 +22,7 @@ import { CREATE_RULE_URL } from '../../../../urls/navigation'; describe( 'Detection rules, Alert Suppression for Essentials tier', { + // skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled tags: ['@serverless', '@skipInServerlessMKI'], env: { ftrConfig: { @@ -29,6 +31,12 @@ describe( { product_line: 'endpoint', product_tier: 'essentials' }, ], }, + // alertSuppressionForEsqlRuleEnabled feature flag is also enabled in a global config + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForEsqlRuleEnabled', + ])}`, + ], }, }, () => { @@ -49,6 +57,9 @@ describe( selectThresholdRuleType(); cy.get(THRESHOLD_ENABLE_SUPPRESSION_CHECKBOX).should('be.enabled'); + + selectEsqlRuleType(); + cy.get(ALERT_SUPPRESSION_FIELDS_INPUT).should('be.enabled'); }); } ); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_supression_ess_basic.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_supression_ess_basic.cy.ts index fbcc43e4652ae0..1f86d6d0dd7895 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_supression_ess_basic.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows_supression_ess_basic.cy.ts @@ -14,6 +14,7 @@ import { selectIndicatorMatchType, selectNewTermsRuleType, selectThresholdRuleType, + selectEsqlRuleType, openSuppressionFieldsTooltipAndCheckLicense, } from '../../../../tasks/create_new_rule'; import { startBasicLicense } from '../../../../tasks/api_calls/licensing'; @@ -48,6 +49,9 @@ describe( selectNewTermsRuleType(); openSuppressionFieldsTooltipAndCheckLicense(); + selectEsqlRuleType(); + openSuppressionFieldsTooltipAndCheckLicense(); + selectThresholdRuleType(); cy.get(THRESHOLD_ENABLE_SUPPRESSION_CHECKBOX).should('be.disabled'); cy.get(THRESHOLD_ENABLE_SUPPRESSION_CHECKBOX).parent().trigger('mouseover'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule.cy.ts new file mode 100644 index 00000000000000..b8cebae392d381 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule.cy.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 { getEsqlRule } from '../../../../objects/rule'; + +import { + RULES_MANAGEMENT_TABLE, + RULE_NAME, + INVESTIGATION_FIELDS_VALUE_ITEM, +} from '../../../../screens/alerts_detection_rules'; +import { + RULE_NAME_HEADER, + RULE_TYPE_DETAILS, + RULE_NAME_OVERRIDE_DETAILS, + DEFINITION_DETAILS, + SUPPRESS_BY_DETAILS, + SUPPRESS_FOR_DETAILS, + SUPPRESS_MISSING_FIELD, +} from '../../../../screens/rule_details'; + +import { ESQL_QUERY_BAR } from '../../../../screens/create_new_rule'; + +import { getDetails, goBackToRulesTable } from '../../../../tasks/rule_details'; +import { expectNumberOfRules } from '../../../../tasks/alerts_detection_rules'; +import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; +import { + expandEsqlQueryBar, + fillAboutRuleAndContinue, + fillDefineEsqlRuleAndContinue, + fillScheduleRuleAndContinue, + selectEsqlRuleType, + getDefineContinueButton, + fillEsqlQueryBar, + fillAboutSpecificEsqlRuleAndContinue, + createRuleWithoutEnabling, + expandAdvancedSettings, + fillCustomInvestigationFields, + fillRuleName, + fillDescription, + getAboutContinueButton, + fillAlertSuppressionFields, + selectAlertSuppressionPerInterval, + setAlertSuppressionDuration, + selectDoNotSuppressForMissingFields, + continueFromDefineStep, + fillAboutRuleMinimumAndContinue, + skipScheduleRuleAction, + interceptEsqlQueryFieldsRequest, +} from '../../../../tasks/create_new_rule'; +import { login } from '../../../../tasks/login'; +import { visit } from '../../../../tasks/navigation'; + +import { CREATE_RULE_URL } from '../../../../urls/navigation'; + +// https://github.com/cypress-io/cypress/issues/22113 +// issue is inside monaco editor, used in ES|QL query input +// calling it after visiting page in each tests, seems fixes the issue +// the only other alternative is patching ResizeObserver, which is something I would like to avoid +const workaroundForResizeObserver = () => + cy.on('uncaught:exception', (err) => { + if (err.message.includes('ResizeObserver loop limit exceeded')) { + return false; + } + }); + +describe( + 'Detection ES|QL rules, creation', + { + // skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled + // alertSuppressionForEsqlRuleEnabled feature flag is also enabled in a global config + tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + env: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForEsqlRuleEnabled', + ])}`, + ], + }, + }, + () => { + const rule = getEsqlRule(); + const expectedNumberOfRules = 1; + + describe('creation', () => { + beforeEach(() => { + deleteAlertsAndRules(); + login(); + + visit(CREATE_RULE_URL); + workaroundForResizeObserver(); + }); + + it('creates an ES|QL rule', function () { + selectEsqlRuleType(); + expandEsqlQueryBar(); + + fillDefineEsqlRuleAndContinue(rule); + fillAboutRuleAndContinue(rule); + fillScheduleRuleAndContinue(rule); + createRuleWithoutEnabling(); + + // ensures after rule save ES|QL rule is displayed + cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); + getDetails(RULE_TYPE_DETAILS).contains('ES|QL'); + + // ensures newly created rule is displayed in table + goBackToRulesTable(); + + expectNumberOfRules(RULES_MANAGEMENT_TABLE, expectedNumberOfRules); + + cy.get(RULE_NAME).should('have.text', rule.name); + }); + + // this test case is important, since field shown in rule override component are coming from ES|QL query, not data view fields API + it('creates an ES|QL rule and overrides its name', function () { + selectEsqlRuleType(); + expandEsqlQueryBar(); + + fillDefineEsqlRuleAndContinue(rule); + fillAboutSpecificEsqlRuleAndContinue({ ...rule, rule_name_override: 'test_id' }); + fillScheduleRuleAndContinue(rule); + createRuleWithoutEnabling(); + + // ensure rule name override is displayed on details page + getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'test_id'); + }); + }); + + describe('ES|QL query validation', () => { + beforeEach(() => { + login(); + visit(CREATE_RULE_URL); + + workaroundForResizeObserver(); + }); + it('shows error when ES|QL query is empty', function () { + selectEsqlRuleType(); + expandEsqlQueryBar(); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).contains('ES|QL query is required'); + }); + + it('proceeds further once invalid query is fixed', function () { + selectEsqlRuleType(); + expandEsqlQueryBar(); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).contains('required'); + + // once correct query typed, we can proceed ot the next step + fillEsqlQueryBar(rule.query); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).should('not.be.visible'); + }); + + it('shows error when non-aggregating ES|QL query does not have metadata operator', function () { + const invalidNonAggregatingQuery = 'from auditbeat* | limit 5'; + selectEsqlRuleType(); + expandEsqlQueryBar(); + fillEsqlQueryBar(invalidNonAggregatingQuery); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).contains( + 'must include the "metadata _id, _version, _index" operator after the source command' + ); + }); + + it('shows error when non-aggregating ES|QL query does not return _id field', function () { + const invalidNonAggregatingQuery = + 'from auditbeat* metadata _id, _version, _index | keep agent.* | limit 5'; + + selectEsqlRuleType(); + expandEsqlQueryBar(); + fillEsqlQueryBar(invalidNonAggregatingQuery); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).contains( + 'must include the "metadata _id, _version, _index" operator after the source command' + ); + }); + + it('shows error when ES|QL query is invalid', function () { + const invalidEsqlQuery = + 'from auditbeat* metadata _id, _version, _index | not_existing_operator'; + visit(CREATE_RULE_URL); + + selectEsqlRuleType(); + expandEsqlQueryBar(); + fillEsqlQueryBar(invalidEsqlQuery); + getDefineContinueButton().click(); + + cy.get(ESQL_QUERY_BAR).contains('Error validating ES|QL'); + }); + }); + + describe('ES|QL investigation fields', () => { + beforeEach(() => { + login(); + visit(CREATE_RULE_URL); + }); + it('shows custom ES|QL field in investigation fields autocomplete and saves it in rule', function () { + const CUSTOM_ESQL_FIELD = '_custom_agent_name'; + const queryWithCustomFields = [ + `from auditbeat* metadata _id, _version, _index`, + `eval ${CUSTOM_ESQL_FIELD} = agent.name`, + `keep _id, _custom_agent_name`, + `limit 5`, + ].join(' | '); + + workaroundForResizeObserver(); + + selectEsqlRuleType(); + expandEsqlQueryBar(); + fillEsqlQueryBar(queryWithCustomFields); + getDefineContinueButton().click(); + + expandAdvancedSettings(); + fillRuleName(); + fillDescription(); + fillCustomInvestigationFields([CUSTOM_ESQL_FIELD]); + getAboutContinueButton().click(); + + fillScheduleRuleAndContinue(rule); + createRuleWithoutEnabling(); + + cy.get(INVESTIGATION_FIELDS_VALUE_ITEM).should('have.text', CUSTOM_ESQL_FIELD); + }); + }); + + describe('Alert suppression', () => { + beforeEach(() => { + login(); + visit(CREATE_RULE_URL); + }); + it('shows custom ES|QL field in investigation fields autocomplete and saves it in rule', function () { + const CUSTOM_ESQL_FIELD = '_custom_agent_name'; + const SUPPRESS_BY_FIELDS = [CUSTOM_ESQL_FIELD, 'agent.type']; + + const queryWithCustomFields = [ + `from auditbeat* metadata _id, _version, _index`, + `eval ${CUSTOM_ESQL_FIELD} = agent.name`, + `drop agent.*`, + ].join(' | '); + + workaroundForResizeObserver(); + + selectEsqlRuleType(); + expandEsqlQueryBar(); + + interceptEsqlQueryFieldsRequest(queryWithCustomFields, 'esqlSuppressionFieldsRequest'); + fillEsqlQueryBar(queryWithCustomFields); + + cy.wait('@esqlSuppressionFieldsRequest'); + fillAlertSuppressionFields(SUPPRESS_BY_FIELDS); + selectAlertSuppressionPerInterval(); + setAlertSuppressionDuration(2, 'h'); + selectDoNotSuppressForMissingFields(); + continueFromDefineStep(); + + // ensures details preview works correctly + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '2h'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); + + fillAboutRuleMinimumAndContinue(rule); + skipScheduleRuleAction(); + createRuleWithoutEnabling(); + + // ensures rule details displayed correctly after rule created + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '2h'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); + }); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule_ess.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule_ess.cy.ts deleted file mode 100644 index 2e95bb19a04773..00000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/esql_rule_ess.cy.ts +++ /dev/null @@ -1,219 +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 { getEsqlRule } from '../../../../objects/rule'; - -import { - RULES_MANAGEMENT_TABLE, - RULE_NAME, - INVESTIGATION_FIELDS_VALUE_ITEM, -} from '../../../../screens/alerts_detection_rules'; -import { - RULE_NAME_HEADER, - RULE_TYPE_DETAILS, - RULE_NAME_OVERRIDE_DETAILS, -} from '../../../../screens/rule_details'; - -import { ESQL_QUERY_BAR } from '../../../../screens/create_new_rule'; - -import { getDetails, goBackToRulesTable } from '../../../../tasks/rule_details'; -import { expectNumberOfRules } from '../../../../tasks/alerts_detection_rules'; -import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; -import { - expandEsqlQueryBar, - fillAboutRuleAndContinue, - fillDefineEsqlRuleAndContinue, - fillScheduleRuleAndContinue, - selectEsqlRuleType, - getDefineContinueButton, - fillEsqlQueryBar, - fillAboutSpecificEsqlRuleAndContinue, - createRuleWithoutEnabling, - expandAdvancedSettings, - fillCustomInvestigationFields, - fillRuleName, - fillDescription, - getAboutContinueButton, -} from '../../../../tasks/create_new_rule'; -import { login } from '../../../../tasks/login'; -import { visit } from '../../../../tasks/navigation'; - -import { CREATE_RULE_URL } from '../../../../urls/navigation'; - -// https://github.com/cypress-io/cypress/issues/22113 -// issue is inside monaco editor, used in ES|QL query input -// calling it after visiting page in each tests, seems fixes the issue -// the only other alternative is patching ResizeObserver, which is something I would like to avoid -const workaroundForResizeObserver = () => - cy.on('uncaught:exception', (err) => { - if (err.message.includes('ResizeObserver loop limit exceeded')) { - return false; - } - }); - -describe('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { - const rule = getEsqlRule(); - const expectedNumberOfRules = 1; - - describe('creation', () => { - beforeEach(() => { - deleteAlertsAndRules(); - login(); - }); - - it('creates an ES|QL rule', function () { - visit(CREATE_RULE_URL); - workaroundForResizeObserver(); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - - fillDefineEsqlRuleAndContinue(rule); - fillAboutRuleAndContinue(rule); - fillScheduleRuleAndContinue(rule); - createRuleWithoutEnabling(); - - // ensures after rule save ES|QL rule is displayed - cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); - getDetails(RULE_TYPE_DETAILS).contains('ES|QL'); - - // ensures newly created rule is displayed in table - goBackToRulesTable(); - - expectNumberOfRules(RULES_MANAGEMENT_TABLE, expectedNumberOfRules); - - cy.get(RULE_NAME).should('have.text', rule.name); - }); - - // this test case is important, since field shown in rule override component are coming from ES|QL query, not data view fields API - it('creates an ES|QL rule and overrides its name', function () { - visit(CREATE_RULE_URL); - workaroundForResizeObserver(); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - - fillDefineEsqlRuleAndContinue(rule); - fillAboutSpecificEsqlRuleAndContinue({ ...rule, rule_name_override: 'test_id' }); - fillScheduleRuleAndContinue(rule); - createRuleWithoutEnabling(); - - // ensure rule name override is displayed on details page - getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'test_id'); - }); - }); - - describe('ES|QL query validation', () => { - beforeEach(() => { - login(); - visit(CREATE_RULE_URL); - }); - it('shows error when ES|QL query is empty', function () { - workaroundForResizeObserver(); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).contains('ES|QL query is required'); - }); - - it('proceeds further once invalid query is fixed', function () { - workaroundForResizeObserver(); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).contains('required'); - - // once correct query typed, we can proceed ot the next step - fillEsqlQueryBar(rule.query); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).should('not.be.visible'); - }); - - it('shows error when non-aggregating ES|QL query does not have metadata operator', function () { - workaroundForResizeObserver(); - - const invalidNonAggregatingQuery = 'from auditbeat* | limit 5'; - selectEsqlRuleType(); - expandEsqlQueryBar(); - fillEsqlQueryBar(invalidNonAggregatingQuery); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).contains( - 'must include the "metadata _id, _version, _index" operator after the source command' - ); - }); - - it('shows error when non-aggregating ES|QL query does not return _id field', function () { - workaroundForResizeObserver(); - - const invalidNonAggregatingQuery = - 'from auditbeat* metadata _id, _version, _index | keep agent.* | limit 5'; - - selectEsqlRuleType(); - expandEsqlQueryBar(); - fillEsqlQueryBar(invalidNonAggregatingQuery); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).contains( - 'must include the "metadata _id, _version, _index" operator after the source command' - ); - }); - - it('shows error when ES|QL query is invalid', function () { - workaroundForResizeObserver(); - const invalidEsqlQuery = - 'from auditbeat* metadata _id, _version, _index | not_existing_operator'; - visit(CREATE_RULE_URL); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - fillEsqlQueryBar(invalidEsqlQuery); - getDefineContinueButton().click(); - - cy.get(ESQL_QUERY_BAR).contains('Error validating ES|QL'); - }); - }); - - describe('ES|QL investigation fields', () => { - beforeEach(() => { - login(); - visit(CREATE_RULE_URL); - }); - it('shows custom ES|QL field in investigation fields autocomplete and saves it in rule', function () { - const CUSTOM_ESQL_FIELD = '_custom_agent_name'; - const queryWithCustomFields = [ - `from auditbeat* metadata _id, _version, _index`, - `eval ${CUSTOM_ESQL_FIELD} = agent.name`, - `keep _id, _custom_agent_name`, - `limit 5`, - ].join(' | '); - - workaroundForResizeObserver(); - - selectEsqlRuleType(); - expandEsqlQueryBar(); - fillEsqlQueryBar(queryWithCustomFields); - getDefineContinueButton().click(); - - expandAdvancedSettings(); - fillRuleName(); - fillDescription(); - fillCustomInvestigationFields([CUSTOM_ESQL_FIELD]); - getAboutContinueButton().click(); - - fillScheduleRuleAndContinue(rule); - createRuleWithoutEnabling(); - - cy.get(INVESTIGATION_FIELDS_VALUE_ITEM).should('have.text', CUSTOM_ESQL_FIELD); - }); - }); -}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/esql_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/esql_rule.cy.ts index 265263ba495c6c..a255ce289b1a7c 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/esql_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/esql_rule.cy.ts @@ -7,9 +7,22 @@ import { getEsqlRule } from '../../../../objects/rule'; -import { ESQL_QUERY_DETAILS, RULE_NAME_OVERRIDE_DETAILS } from '../../../../screens/rule_details'; +import { + ESQL_QUERY_DETAILS, + RULE_NAME_OVERRIDE_DETAILS, + SUPPRESS_FOR_DETAILS, + DEFINITION_DETAILS, + SUPPRESS_MISSING_FIELD, + SUPPRESS_BY_DETAILS, + DETAILS_TITLE, +} from '../../../../screens/rule_details'; -import { ESQL_QUERY_BAR } from '../../../../screens/create_new_rule'; +import { + ESQL_QUERY_BAR, + ALERT_SUPPRESSION_DURATION_INPUT, + ALERT_SUPPRESSION_FIELDS, + ALERT_SUPPRESSION_MISSING_FIELDS_SUPPRESS, +} from '../../../../screens/create_new_rule'; import { createRule } from '../../../../tasks/api_calls/rules'; @@ -17,12 +30,15 @@ import { RULES_MANAGEMENT_URL } from '../../../../urls/rules_management'; import { getDetails } from '../../../../tasks/rule_details'; import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; import { - clearEsqlQueryBar, expandEsqlQueryBar, fillEsqlQueryBar, fillOverrideEsqlRuleName, goToAboutStepTab, expandAdvancedSettings, + selectAlertSuppressionPerRuleExecution, + selectDoNotSuppressForMissingFields, + fillAlertSuppressionFields, + interceptEsqlQueryFieldsRequest, } from '../../../../tasks/create_new_rule'; import { login } from '../../../../tasks/login'; @@ -33,63 +49,160 @@ import { visit } from '../../../../tasks/navigation'; const rule = getEsqlRule(); -const expectedValidEsqlQuery = 'from auditbeat* | stats count(event.category) by event.category'; - -describe('Detection ES|QL rules, edit', { tags: ['@ess'] }, () => { - beforeEach(() => { - login(); - deleteAlertsAndRules(); - createRule(rule); - }); - - it('edits ES|QL rule and checks details page', () => { - visit(RULES_MANAGEMENT_URL); - editFirstRule(); - expandEsqlQueryBar(); - // ensure once edit form opened, correct query is displayed in ES|QL input - cy.get(ESQL_QUERY_BAR).contains(rule.query); - - clearEsqlQueryBar(); - fillEsqlQueryBar(expectedValidEsqlQuery); - - saveEditedRule(); - - // ensure updated query is displayed on details page - getDetails(ESQL_QUERY_DETAILS).should('have.text', expectedValidEsqlQuery); - }); - - it('edits ES|QL rule query and override rule name with new property', () => { - visit(RULES_MANAGEMENT_URL); - editFirstRule(); - clearEsqlQueryBar(); - fillEsqlQueryBar(expectedValidEsqlQuery); - - goToAboutStepTab(); - expandAdvancedSettings(); - fillOverrideEsqlRuleName('event.category'); - - saveEditedRule(); - - // ensure rule name override is displayed on details page - getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'event.category'); - }); - - it('adds ES|QL override rule name on edit', () => { - visit(RULES_MANAGEMENT_URL); - editFirstRule(); - - expandEsqlQueryBar(); - // ensure once edit form opened, correct query is displayed in ES|QL input - cy.get(ESQL_QUERY_BAR).contains(rule.query); - - goToAboutStepTab(); - expandAdvancedSettings(); - // this field defined to be returned in rule query - fillOverrideEsqlRuleName('test_id'); - - saveEditedRule(); - - // ensure rule name override is displayed on details page - getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'test_id'); - }); -}); +const expectedValidEsqlQuery = + 'from auditbeat* | stats _count=count(event.category) by event.category'; + +// skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled +// alertSuppressionForEsqlRuleEnabled feature flag is also enabled in a global config +describe( + 'Detection ES|QL rules, edit', + { + tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + env: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForEsqlRuleEnabled', + ])}`, + ], + }, + }, + () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + createRule(rule); + + visit(RULES_MANAGEMENT_URL); + editFirstRule(); + }); + + it('edits ES|QL rule and checks details page', () => { + expandEsqlQueryBar(); + // ensure once edit form opened, correct query is displayed in ES|QL input + cy.get(ESQL_QUERY_BAR).contains(rule.query); + + fillEsqlQueryBar(expectedValidEsqlQuery); + + saveEditedRule(); + + // ensure updated query is displayed on details page + getDetails(ESQL_QUERY_DETAILS).should('have.text', expectedValidEsqlQuery); + }); + + it('edits ES|QL rule query and override rule name with new property', () => { + fillEsqlQueryBar(expectedValidEsqlQuery); + + goToAboutStepTab(); + expandAdvancedSettings(); + fillOverrideEsqlRuleName('event.category'); + + saveEditedRule(); + + // ensure rule name override is displayed on details page + getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'event.category'); + }); + + it('adds ES|QL override rule name on edit', () => { + expandEsqlQueryBar(); + // ensure once edit form opened, correct query is displayed in ES|QL input + cy.get(ESQL_QUERY_BAR).contains(rule.query); + + goToAboutStepTab(); + expandAdvancedSettings(); + // this field defined to be returned in rule query + fillOverrideEsqlRuleName('test_id'); + + saveEditedRule(); + + // ensure rule name override is displayed on details page + getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'test_id'); + }); + + describe('with configured suppression', () => { + const SUPPRESS_BY_FIELDS = ['event.category']; + const NEW_SUPPRESS_BY_FIELDS = ['event.category', '_count']; + + beforeEach(() => { + deleteAlertsAndRules(); + createRule({ + ...rule, + query: expectedValidEsqlQuery, + alert_suppression: { + group_by: SUPPRESS_BY_FIELDS, + duration: { value: 3, unit: 'h' }, + missing_fields_strategy: 'suppress', + }, + }); + }); + + it('displays suppress options correctly on edit form and allows its editing', () => { + visit(RULES_MANAGEMENT_URL); + + interceptEsqlQueryFieldsRequest(expectedValidEsqlQuery, 'esqlSuppressionFieldsRequest'); + editFirstRule(); + + // check saved suppression settings + cy.get(ALERT_SUPPRESSION_DURATION_INPUT).eq(0).should('be.enabled').should('have.value', 3); + cy.get(ALERT_SUPPRESSION_DURATION_INPUT) + .eq(1) + .should('be.enabled') + .should('have.value', 'h'); + cy.get(ALERT_SUPPRESSION_FIELDS).should('contain', SUPPRESS_BY_FIELDS.join('')); + cy.get(ALERT_SUPPRESSION_MISSING_FIELDS_SUPPRESS).should('be.checked'); + + selectAlertSuppressionPerRuleExecution(); + selectDoNotSuppressForMissingFields(); + + cy.wait('@esqlSuppressionFieldsRequest'); + fillAlertSuppressionFields(['_count']); + + saveEditedRule(); + + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', NEW_SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); + }); + }); + + describe('without suppression', () => { + const SUPPRESS_BY_FIELDS = ['event.category']; + + beforeEach(() => { + deleteAlertsAndRules(); + createRule({ + ...rule, + query: expectedValidEsqlQuery, + }); + }); + + it('enables suppression on time interval', () => { + visit(RULES_MANAGEMENT_URL); + + interceptEsqlQueryFieldsRequest(expectedValidEsqlQuery, 'esqlSuppressionFieldsRequest'); + editFirstRule(); + + cy.wait('@esqlSuppressionFieldsRequest'); + fillAlertSuppressionFields(SUPPRESS_BY_FIELDS); + + saveEditedRule(); + + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Suppress and group alerts for events with missing fields' + ); + + // suppression functionality should be under Tech Preview + cy.contains(DETAILS_TITLE, SUPPRESS_FOR_DETAILS).contains('Technical Preview'); + }); + }); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts index 15229445e54f0f..13af60594d1037 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts @@ -337,6 +337,14 @@ describe('Detection rules, Prebuilt Rules Installation and Update workflow', () type: 'esql', language: 'esql', query: 'FROM .alerts-security.alerts-default | STATS count = COUNT(@timestamp) BY @timestamp', + alert_suppression: { + group_by: [ + 'Endpoint.policy.applied.artifacts.global.identifiers.name', + 'Endpoint.policy.applied.id', + ], + duration: { unit: 'm', value: 5 }, + missing_fields_strategy: 'suppress', + }, }); const RULE_WITHOUT_INVESTIGATION_AND_SETUP_GUIDES = createRuleAssetSavedObject({ @@ -621,25 +629,23 @@ describe('Detection rules, Prebuilt Rules Installation and Update workflow', () const { query } = NEW_TERMS_INDEX_PATTERN_RULE['security-rule'] as { query: string }; assertCustomQueryPropertyShown(query); }); - }); - describe( - 'Skip in Serverless environment', - { tags: TEST_ENV_TAGS.filter((tag) => tag !== '@serverless') }, - () => { - /* Serverless environment doesn't support ESQL rules just yet */ - it('ESQL rule properties', () => { - clickAddElasticRulesButton(); + it('ESQL rule properties', () => { + clickAddElasticRulesButton(); - openRuleInstallPreview(ESQL_RULE['security-rule'].name); + openRuleInstallPreview(ESQL_RULE['security-rule'].name); - assertCommonPropertiesShown(commonProperties); + assertCommonPropertiesShown(commonProperties); - const { query } = ESQL_RULE['security-rule'] as { query: string }; - assertEsqlQueryPropertyShown(query); - }); - } - ); + const { query } = ESQL_RULE['security-rule'] as { query: string }; + assertEsqlQueryPropertyShown(query); + + const { alert_suppression: alertSuppression } = ESQL_RULE['security-rule'] as { + alert_suppression: AlertSuppression; + }; + assertAlertSuppressionPropertiesShown(alertSuppression); + }); + }); }); }); @@ -1049,26 +1055,24 @@ describe('Detection rules, Prebuilt Rules Installation and Update workflow', () }; assertCustomQueryPropertyShown(query); }); - }); - describe( - 'Skip in Serverless environment', - { tags: TEST_ENV_TAGS.filter((tag) => tag !== '@serverless') }, - () => { - /* Serverless environment doesn't support ESQL rules just yet */ - it('ESQL rule properties', () => { - clickRuleUpdatesTab(); + it('ESQL rule properties', () => { + clickRuleUpdatesTab(); + + openRuleUpdatePreview(UPDATED_ESQL_RULE['security-rule'].name); + selectPreviewTab(PREVIEW_TABS.OVERVIEW); - openRuleUpdatePreview(UPDATED_ESQL_RULE['security-rule'].name); - selectPreviewTab(PREVIEW_TABS.OVERVIEW); + assertCommonPropertiesShown(commonProperties); - assertCommonPropertiesShown(commonProperties); + const { query } = UPDATED_ESQL_RULE['security-rule'] as { query: string }; + assertEsqlQueryPropertyShown(query); - const { query } = UPDATED_ESQL_RULE['security-rule'] as { query: string }; - assertEsqlQueryPropertyShown(query); - }); - } - ); + const { alert_suppression: alertSuppression } = UPDATED_ESQL_RULE['security-rule'] as { + alert_suppression: AlertSuppression; + }; + assertAlertSuppressionPropertiesShown(alertSuppression); + }); + }); }); describe('Viewing rule changes in JSON diff view', { tags: TEST_ENV_TAGS }, () => { diff --git a/x-pack/test/security_solution_cypress/cypress/objects/rule.ts b/x-pack/test/security_solution_cypress/cypress/objects/rule.ts index 0b9a4ddedf04d5..fcbaaca3d1ddeb 100644 --- a/x-pack/test/security_solution_cypress/cypress/objects/rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/objects/rule.ts @@ -406,7 +406,7 @@ export const getEsqlRule = ( ): EsqlRuleCreateProps => ({ type: 'esql', language: 'esql', - query: 'from auditbeat-* [metadata _id, _version, _index] | keep agent.*,_id | eval test_id=_id', + query: 'from auditbeat-* metadata _id, _version, _index | keep agent.*,_id | eval test_id=_id', name: 'ES|QL Rule', description: 'The new rule description.', severity: 'high', diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts index a71d990ec31a93..181f5dfa22eb1d 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts @@ -613,16 +613,23 @@ export const fillDefineNewTermsRuleAndContinue = (rule: NewTermsRuleCreateProps) cy.get(DEFINE_CONTINUE_BUTTON).should('exist').click({ force: true }); }; -export const fillEsqlQueryBar = (query: string) => { +const typeEsqlQueryBar = (query: string) => { // eslint-disable-next-line cypress/no-force cy.get(ESQL_QUERY_BAR_INPUT_AREA).should('not.be.disabled').type(query, { force: true }); }; -export const clearEsqlQueryBar = () => { - // monaco editor under the hood is quite complex in matter to clear it - // underlying textarea holds just the last character of query displayed in search bar - // in order to clear it - it requires to select all text within editor and type in it - fillEsqlQueryBar(Cypress.platform === 'darwin' ? '{cmd}a' : '{ctrl}a'); +/** + * clears ES|QL search bar first + * types new query + */ +export const fillEsqlQueryBar = (query: string) => { + // before typing anything in query bar, we need to clear it + // Since first click on ES|QL query bar trigger re-render. We need to clear search bar during second attempt + typeEsqlQueryBar(' '); + typeEsqlQueryBar(Cypress.platform === 'darwin' ? '{cmd}a{del}' : '{ctrl}a{del}'); + + // only after this query can be safely typed + typeEsqlQueryBar(query); }; /** @@ -939,6 +946,20 @@ export const openSuppressionFieldsTooltipAndCheckLicense = () => { cy.get(TOOLTIP).contains('Platinum license'); }; +/** + * intercepts /internal/bsearch request that contains esqlQuery and adds alias to it + */ +export const interceptEsqlQueryFieldsRequest = ( + esqlQuery: string, + alias: string = 'esqlQueryFields' +) => { + cy.intercept('POST', '/internal/bsearch?*', (req) => { + if (req.body?.batch?.[0]?.request?.params?.query?.includes?.(esqlQuery)) { + req.alias = alias; + } + }); +}; + export const checkLoadQueryDynamically = () => { cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).click({ force: true }); cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).should('be.checked'); diff --git a/x-pack/test/security_solution_cypress/serverless_config.ts b/x-pack/test/security_solution_cypress/serverless_config.ts index 51462be717fc81..04a15e49d070a1 100644 --- a/x-pack/test/security_solution_cypress/serverless_config.ts +++ b/x-pack/test/security_solution_cypress/serverless_config.ts @@ -35,6 +35,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { { product_line: 'cloud', product_tier: 'complete' }, ])}`, `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForEsqlRuleEnabled', 'bulkCustomHighlightedFieldsEnabled', ])}`, ], From 953706a7d7d3e6c5b6977cbd0520b8e1f47d78b2 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 20 May 2024 14:49:29 +0300 Subject: [PATCH 15/97] fix: Rules > Detection (SEIM) Rules][SCREEN READER]: Snooze notifications modal is not trapping VoiceOver + Safari properly (#182670) Closes: https://github.com/elastic/security-team/issues/8716 ## Description The Detection Rules table has a Snooze notifications modal that is not trapping focus consistently in Safari + VoiceOver. The focus is being "bounced" to the `
` container when I traverse using `Ctrl + Opt + RIGHT_ARROW` or quick arrow navigation methods. These are the default VO navigation methods. This is not affecting Chrome + JAWS or Firefox + NVDA. Screenshot and MOV attached below. ### Steps to recreate 1. Open [Detection Rules (SIEM)](https://kibana.siem.estc.dev/app/security/rules/management) 2. Enable VoiceOver (only use Safari for this test) 3. Tab to the first Snooze Notification bell icon and press `Ctrl + Opt + Enter` to open it 4. Navigate through the modal by pressing `Ctrl + Opt + Right_Arrow` 5. Verify when your focus should be on the "days" dropdown, it pops out to the main container, escaping the modal ### What was done? 1. Focus trap logic has been implemented to ensure that focus returns to the correct location after executing onRuleChanged. ### Screen: https://github.com/elastic/kibana/assets/20072247/1c8951df-828d-4c7d-8b2c-2ea5a4d5e400 --- .../components/notify_badge/notify_badge.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/notify_badge/notify_badge.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/notify_badge/notify_badge.tsx index e09892471419be..72344122d90f2f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/notify_badge/notify_badge.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/notify_badge/notify_badge.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo, useState, useRef } from 'react'; import moment from 'moment'; import { EuiButton, @@ -91,6 +91,8 @@ export const RulesListNotifyBadge: React.FunctionComponent(null); + const { notifications: { toasts }, } = useKibana().services; @@ -192,6 +194,7 @@ export const RulesListNotifyBadge: React.FunctionComponent {formattedSnoozeText} @@ -210,6 +213,7 @@ export const RulesListNotifyBadge: React.FunctionComponent {formattedSnoozeText} @@ -232,6 +236,7 @@ export const RulesListNotifyBadge: React.FunctionComponent ); }, [isPopoverOpen, isLoading, isDisabled, showOnHover, openPopover]); @@ -248,6 +253,7 @@ export const RulesListNotifyBadge: React.FunctionComponent ); }, [isLoading, isDisabled, openPopover]); @@ -311,9 +317,10 @@ export const RulesListNotifyBadge: React.FunctionComponent focusTrapButtonRef.current?.focus()); } }, - [setRequestInFlightLoading, snoozeRule, onRuleChanged, toasts, closePopover] + [closePopover, snoozeRule, onRuleChanged, toasts] ); const onApplyUnsnooze = useCallback( @@ -328,9 +335,10 @@ export const RulesListNotifyBadge: React.FunctionComponent focusTrapButtonRef.current?.focus()); } }, - [setRequestInFlightLoading, unsnoozeRule, onRuleChanged, toasts, closePopover] + [closePopover, unsnoozeRule, onRuleChanged, toasts] ); const popover = ( From 79b8babe9166ab6c64505b16a752c332a5a7fe44 Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Mon, 20 May 2024 14:41:10 +0200 Subject: [PATCH 16/97] [expressions] caching (#180440) --- .../data/common/search/expressions/eql.ts | 1 + .../search/expressions/esaggs/esaggs_fn.ts | 1 + .../data/common/search/expressions/esdsl.ts | 1 + .../data/common/search/expressions/esql.ts | 1 + .../data/common/search/expressions/essql.ts | 1 + .../expressions/common/execution/execution.ts | 115 ++++++++++++------ .../expressions/common/execution/types.ts | 5 + .../executor/executor.execution.test.ts | 6 +- .../common/executor/executor.test.ts | 90 +++++++++++++- .../expressions/common/executor/executor.ts | 23 +++- .../expression_function.ts | 7 ++ .../common/expression_functions/types.ts | 5 + src/plugins/expressions/common/mocks.ts | 1 + .../common/service/expressions_services.ts | 2 + src/plugins/expressions/public/loader.ts | 2 + src/plugins/expressions/public/types/index.ts | 3 +- .../lens/public/app_plugin/app.test.tsx | 16 +-- .../lens_configuration_flyout.tsx | 10 +- .../formula/editor/formula_editor.tsx | 7 +- .../formula/editor/math_completion.test.ts | 12 +- .../formula/editor/math_completion.ts | 9 +- .../datasources/form_based/to_expression.ts | 9 +- .../config_panel/config_panel.test.tsx | 1 + .../editor_frame/editor_frame.tsx | 5 + .../workspace_panel/workspace_panel.tsx | 1 + .../lens/public/embeddable/embeddable.tsx | 4 + .../public/embeddable/expression_wrapper.tsx | 1 + x-pack/plugins/lens/public/mocks/index.ts | 4 + .../plugins/lens/public/mocks/store_mocks.tsx | 2 +- .../__snapshots__/load_initial.test.tsx.snap | 4 +- .../context_middleware/index.test.ts | 4 +- .../lens/public/state_management/selectors.ts | 1 + x-pack/plugins/lens/public/types.ts | 1 + x-pack/plugins/lens/public/utils.ts | 22 ++++ .../xy/annotations/helpers.test.ts | 30 ++++- .../visualizations/xy/annotations/helpers.tsx | 6 +- .../visualizations/xy/visualization.test.tsx | 1 + .../annotations_panel.tsx | 4 +- 38 files changed, 339 insertions(+), 79 deletions(-) diff --git a/src/plugins/data/common/search/expressions/eql.ts b/src/plugins/data/common/search/expressions/eql.ts index d60bb6f72480a6..d050461ae6b403 100644 --- a/src/plugins/data/common/search/expressions/eql.ts +++ b/src/plugins/data/common/search/expressions/eql.ts @@ -58,6 +58,7 @@ export const getEqlFn = ({ name, type: 'eql_raw_response', inputTypes: ['kibana_context', 'null'], + allowCache: true, help: i18n.translate('data.search.eql.help', { defaultMessage: 'Run Elasticsearch request', }), diff --git a/src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts b/src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts index 7b5b2700f72c7a..818e4ab72d59fd 100644 --- a/src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts +++ b/src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts @@ -57,6 +57,7 @@ export const getEsaggsMeta: () => Omit name, type: 'datatable', inputTypes: ['kibana_context', 'null'], + allowCache: true, help: i18n.translate('data.functions.esaggs.help', { defaultMessage: 'Run AggConfig aggregation', }), diff --git a/src/plugins/data/common/search/expressions/esdsl.ts b/src/plugins/data/common/search/expressions/esdsl.ts index 84d301498f2f93..1173ae83ec47af 100644 --- a/src/plugins/data/common/search/expressions/esdsl.ts +++ b/src/plugins/data/common/search/expressions/esdsl.ts @@ -51,6 +51,7 @@ export const getEsdslFn = ({ name, type: 'es_raw_response', inputTypes: ['kibana_context', 'null'], + allowCache: true, help: i18n.translate('data.search.esdsl.help', { defaultMessage: 'Run Elasticsearch request', }), diff --git a/src/plugins/data/common/search/expressions/esql.ts b/src/plugins/data/common/search/expressions/esql.ts index 2303dabb7e59ce..6c3929f2014583 100644 --- a/src/plugins/data/common/search/expressions/esql.ts +++ b/src/plugins/data/common/search/expressions/esql.ts @@ -75,6 +75,7 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => { name: 'esql', type: 'datatable', inputTypes: ['kibana_context', 'null'], + allowCache: true, help: i18n.translate('data.search.esql.help', { defaultMessage: 'Queries Elasticsearch using ES|QL.', }), diff --git a/src/plugins/data/common/search/expressions/essql.ts b/src/plugins/data/common/search/expressions/essql.ts index 69d0e7ed9f727a..e459aa4fae1708 100644 --- a/src/plugins/data/common/search/expressions/essql.ts +++ b/src/plugins/data/common/search/expressions/essql.ts @@ -66,6 +66,7 @@ export const getEssqlFn = ({ getStartDependencies }: EssqlFnArguments) => { name: 'essql', type: 'datatable', inputTypes: ['kibana_context', 'null'], + allowCache: true, help: i18n.translate('data.search.essql.help', { defaultMessage: 'Queries Elasticsearch using Elasticsearch SQL.', }), diff --git a/src/plugins/expressions/common/execution/execution.ts b/src/plugins/expressions/common/execution/execution.ts index 13162b3a9d8253..9dea349940ccb4 100644 --- a/src/plugins/expressions/common/execution/execution.ts +++ b/src/plugins/expressions/common/execution/execution.ts @@ -27,7 +27,7 @@ import { Subscription, } from 'rxjs'; import { catchError, finalize, map, pluck, shareReplay, switchMap, tap } from 'rxjs'; -import { now, AbortError } from '@kbn/kibana-utils-plugin/common'; +import { now, AbortError, calculateObjectHash } from '@kbn/kibana-utils-plugin/common'; import { Adapters } from '@kbn/inspector-plugin/common'; import { Executor } from '../executor'; import { createExecutionContainer, ExecutionContainer } from './container'; @@ -55,6 +55,10 @@ type UnwrapReturnType unknown> = ? UnwrapObservable> : Awaited>; +export interface FunctionCacheItem { + value: unknown; + time: number; +} /** * The result returned after an expression function execution. */ @@ -70,6 +74,8 @@ export interface ExecutionResult { result: Output; } +const maxCacheSize = 1000; + const createAbortErrorValue = () => createError({ message: 'The expression was aborted.', @@ -235,6 +241,7 @@ export class Execution< * @private */ private readonly childExecutions: Execution[] = []; + private cacheTimeout: number = 30000; /** * Contract is a public representation of `Execution` instances. Contract we @@ -248,7 +255,11 @@ export class Execution< return this.context.inspectorAdapters; } - constructor(public readonly execution: ExecutionParams, private readonly logger?: Logger) { + constructor( + public readonly execution: ExecutionParams, + private readonly logger?: Logger, + private readonly functionCache: Map = new Map() + ) { const { executor } = execution; this.contract = new ExecutionContract(this); @@ -278,6 +289,7 @@ export class Execution< ? () => execution.params.kibanaRequest! : undefined, variables: execution.params.variables || {}, + allowCache: this.execution.params.allowCache, types: executor.getTypes(), abortSignal: this.abortController.signal, inspectorAdapters, @@ -454,42 +466,75 @@ export class Execution< input: unknown, args: Record ): Observable> { - return of(input).pipe( - map((currentInput) => this.cast(currentInput, fn.inputTypes)), - switchMap((normalizedInput) => of(fn.fn(normalizedInput, args, this.context))), - switchMap( - (fnResult) => - (isObservable(fnResult) - ? fnResult - : from(isPromise(fnResult) ? fnResult : [fnResult])) as Observable< - UnwrapReturnType - > - ), - map((output) => { - // Validate that the function returned the type it said it would. - // This isn't required, but it keeps function developers honest. - const returnType = getType(output); - const expectedType = fn.type; - if (expectedType && returnType !== expectedType) { - throw new Error( - `Function '${fn.name}' should return '${expectedType}',` + - ` actually returned '${returnType}'` - ); - } + let hash: string | undefined; + let lastValue: unknown; + let completionFlag = false; + + return of(input) + .pipe( + map((currentInput) => this.cast(currentInput, fn.inputTypes)), + switchMap((normalizedInput) => { + if (fn.allowCache && this.context.allowCache) { + hash = calculateObjectHash([ + fn.name, + normalizedInput, + args, + this.context.getSearchContext(), + ]); + } + if (hash && this.functionCache.has(hash)) { + const cached = this.functionCache.get(hash); + if (cached && Date.now() - cached.time < this.cacheTimeout) { + return of(cached.value); + } + } + return of(fn.fn(normalizedInput, args, this.context)); + }), + switchMap((fnResult) => { + return ( + isObservable(fnResult) ? fnResult : from(isPromise(fnResult) ? fnResult : [fnResult]) + ) as Observable>; + }), + map((output) => { + // Validate that the function returned the type it said it would. + // This isn't required, but it keeps function developers honest. + const returnType = getType(output); + const expectedType = fn.type; + if (expectedType && returnType !== expectedType) { + throw new Error( + `Function '${fn.name}' should return '${expectedType}',` + + ` actually returned '${returnType}'` + ); + } - // Validate the function output against the type definition's validate function. - const type = this.context.types[fn.type]; - if (type && type.validate) { - try { - type.validate(output); - } catch (e) { - throw new Error(`Output of '${fn.name}' is not a valid type '${fn.type}': ${e}`); + // Validate the function output against the type definition's validate function. + const type = this.context.types[fn.type]; + if (type && type.validate) { + try { + type.validate(output); + } catch (e) { + throw new Error(`Output of '${fn.name}' is not a valid type '${fn.type}': ${e}`); + } } - } - return output; - }) - ); + lastValue = output; + + return output; + }), + finalize(() => { + if (completionFlag && hash) { + while (this.functionCache.size >= maxCacheSize) { + this.functionCache.delete(this.functionCache.keys().next().value); + } + this.functionCache.set(hash, { value: lastValue, time: Date.now() }); + } + }) + ) + .pipe( + tap({ + complete: () => (completionFlag = true), // Set flag true only on successful completion + }) + ); } public cast(value: unknown, toTypeNames?: string[]): Type { diff --git a/src/plugins/expressions/common/execution/types.ts b/src/plugins/expressions/common/execution/types.ts index 03dbcc8a6ff137..4d8923003893a6 100644 --- a/src/plugins/expressions/common/execution/types.ts +++ b/src/plugins/expressions/common/execution/types.ts @@ -35,6 +35,11 @@ export interface ExecutionContext */ types: Record; + /** + * Allow caching in the current execution. + */ + allowCache?: boolean; + /** * Adds ability to abort current execution. */ diff --git a/src/plugins/expressions/common/executor/executor.execution.test.ts b/src/plugins/expressions/common/executor/executor.execution.test.ts index ea906881e9738c..44e6c92134b7e0 100644 --- a/src/plugins/expressions/common/executor/executor.execution.test.ts +++ b/src/plugins/expressions/common/executor/executor.execution.test.ts @@ -27,7 +27,8 @@ describe('Executor mocked execution tests', () => { expect(Execution).toHaveBeenCalledWith( expect.objectContaining({ expression: 'foo bar="baz"' }), - undefined + undefined, + expect.anything() ); }); }); @@ -40,7 +41,8 @@ describe('Executor mocked execution tests', () => { expect(Execution).toHaveBeenCalledWith( expect.not.objectContaining({ expression: expect.anything() }), - undefined + undefined, + expect.anything() ); }); }); diff --git a/src/plugins/expressions/common/executor/executor.test.ts b/src/plugins/expressions/common/executor/executor.test.ts index 6f9dae491e5b23..de651e4c35f10f 100644 --- a/src/plugins/expressions/common/executor/executor.test.ts +++ b/src/plugins/expressions/common/executor/executor.test.ts @@ -9,7 +9,7 @@ import { Executor } from './executor'; import * as expressionTypes from '../expression_types'; import * as expressionFunctions from '../expression_functions'; -import { Execution } from '../execution'; +import { Execution, FunctionCacheItem } from '../execution'; import { ExpressionAstFunction, parseExpression, formatExpression } from '../ast'; import { MigrateFunction } from '@kbn/kibana-utils-plugin/common/persistable_state'; import { SavedObjectReference } from '@kbn/core/types'; @@ -312,4 +312,92 @@ describe('Executor', () => { }); }); }); + + describe('caching', () => { + const functionCache: Map = new Map(); + const fakeCacheEntry = { time: Date.now(), value: 'test' }; + let executor: Executor; + + beforeAll(() => { + executor = new Executor(undefined, undefined, functionCache); + executor.registerFunction(expressionFunctions.variable); + expressionFunctions.theme.allowCache = true; + executor.registerFunction(expressionFunctions.theme); + }); + + afterEach(() => { + functionCache.clear(); + }); + + it('caches the result of function', async () => { + await executor.run('theme size default=12', null, { allowCache: true }).toPromise(); + expect(functionCache.size).toEqual(1); + const entry = functionCache.keys().next().value; + functionCache.set(entry, fakeCacheEntry); + const result = await executor + .run('theme size default=12', null, { allowCache: true }) + .toPromise(); + expect(functionCache.size).toEqual(1); + expect(result?.result).toEqual(fakeCacheEntry.value); + }); + + it('doesnt cache if allowCache flag is false', async () => { + await executor.run('theme size default=12', null, { allowCache: true }).toPromise(); + expect(functionCache.size).toEqual(1); + const entry = functionCache.keys().next().value; + functionCache.set(entry, fakeCacheEntry); + const result = await executor + .run('theme size default=12', null, { allowCache: false }) + .toPromise(); + expect(functionCache.size).toEqual(1); + expect(result?.result).not.toEqual(fakeCacheEntry.value); + }); + + it('doesnt cache results of functions that have allowCache property set to false', async () => { + await executor.run('var name="test"', null, { allowCache: true }).toPromise(); + expect(functionCache.size).toEqual(0); + }); + + describe('doesnt use cached version', () => { + const cachedVersion = { time: Date.now(), value: 'value' }; + + beforeAll(async () => { + await executor.run('theme size default=12', null, { allowCache: true }).toPromise(); + expect(functionCache.size).toEqual(1); + const entry: string = Object.keys(functionCache)[0]; + functionCache.set(entry, cachedVersion); + }); + + it('input changed', async () => { + const result = await executor + .run( + 'theme size default=12', + { + type: 'kibana_context', + value: 'test', + }, + { allowCache: true } + ) + .toPromise(); + expect(result).not.toEqual(cachedVersion); + }); + + it('arguments changed', async () => { + const result = await executor + .run('theme size default=14', null, { allowCache: true }) + .toPromise(); + expect(result).not.toEqual(cachedVersion); + }); + + it('search context changed', async () => { + const result = await executor + .run('theme size default=12', null, { + searchContext: { filters: [] }, + allowCache: true, + }) + .toPromise(); + expect(result).not.toEqual(cachedVersion); + }); + }); + }); }); diff --git a/src/plugins/expressions/common/executor/executor.ts b/src/plugins/expressions/common/executor/executor.ts index e8d01b15fd81d2..28ccd1b95db1f3 100644 --- a/src/plugins/expressions/common/executor/executor.ts +++ b/src/plugins/expressions/common/executor/executor.ts @@ -22,7 +22,12 @@ import { import { ExecutorState, ExecutorContainer } from './container'; import { createExecutorContainer } from './container'; import { AnyExpressionFunctionDefinition, ExpressionFunction } from '../expression_functions'; -import { Execution, ExecutionParams, ExecutionResult } from '../execution/execution'; +import { + Execution, + ExecutionParams, + ExecutionResult, + FunctionCacheItem, +} from '../execution/execution'; import { IRegistry } from '../types'; import { ExpressionType } from '../expression_types/expression_type'; import { AnyExpressionTypeDefinition } from '../expression_types/types'; @@ -109,10 +114,17 @@ export class Executor = Record) { + private functionCache: Map; + + constructor( + private readonly logger?: Logger, + state?: ExecutorState, + functionCache: Map = new Map() + ) { this.functions = new FunctionsRegistry(this as Executor); this.types = new TypesRegistry(this as Executor); this.container = createExecutorContainer(state); + this.functionCache = functionCache; } public get state(): ExecutorState { @@ -189,12 +201,17 @@ export class Executor = Record(executionParams, this.logger); + const execution = new Execution( + executionParams, + this.logger, + this.functionCache + ); return execution; } diff --git a/src/plugins/expressions/common/expression_functions/expression_function.ts b/src/plugins/expressions/common/expression_functions/expression_function.ts index 7ce51e3a7d36d9..5df2e40a8286df 100644 --- a/src/plugins/expressions/common/expression_functions/expression_function.ts +++ b/src/plugins/expressions/common/expression_functions/expression_function.ts @@ -38,6 +38,11 @@ export class ExpressionFunction implements PersistableState c); diff --git a/src/plugins/expressions/common/expression_functions/types.ts b/src/plugins/expressions/common/expression_functions/types.ts index c59169ccf04ab7..7e14d4ba72f30f 100644 --- a/src/plugins/expressions/common/expression_functions/types.ts +++ b/src/plugins/expressions/common/expression_functions/types.ts @@ -57,6 +57,11 @@ export interface ExpressionFunctionDefinition< */ type?: TypeString | UnmappedTypeStrings; + /** + * Opt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned. + */ + allowCache?: boolean; + /** * List of allowed type names for input value of this function. If this * property is set the input of function will be cast to the first possible diff --git a/src/plugins/expressions/common/mocks.ts b/src/plugins/expressions/common/mocks.ts index 4141da06ec04e0..db880a4eaa5d20 100644 --- a/src/plugins/expressions/common/mocks.ts +++ b/src/plugins/expressions/common/mocks.ts @@ -28,6 +28,7 @@ export const createMockExecutionContext = requests: {}, data: {}, }, + allowCache: false, } as unknown as ExecutionContext; return { diff --git a/src/plugins/expressions/common/service/expressions_services.ts b/src/plugins/expressions/common/service/expressions_services.ts index e73e07a387c468..d28703b40145b7 100644 --- a/src/plugins/expressions/common/service/expressions_services.ts +++ b/src/plugins/expressions/common/service/expressions_services.ts @@ -173,6 +173,8 @@ export interface ExpressionExecutionParams { * @deafult 0 */ throttle?: number; + + allowCache?: boolean; } /** diff --git a/src/plugins/expressions/public/loader.ts b/src/plugins/expressions/public/loader.ts index eb45b581c29a26..11ed32c4633a95 100644 --- a/src/plugins/expressions/public/loader.ts +++ b/src/plugins/expressions/public/loader.ts @@ -151,6 +151,7 @@ export class ExpressionLoader { executionContext: params.executionContext, partial: params.partial, throttle: params.throttle, + allowCache: params.allowCache, }); this.subscription = this.execution .getData() @@ -190,6 +191,7 @@ export class ExpressionLoader { this.params.debug = Boolean(params.debug); this.params.partial = Boolean(params.partial); this.params.throttle = Number(params.throttle ?? 1000); + this.params.allowCache = params.allowCache; this.params.inspectorAdapters = (params.inspectorAdapters || this.execution?.inspect()) as Adapters; diff --git a/src/plugins/expressions/public/types/index.ts b/src/plugins/expressions/public/types/index.ts index c1b7dc8cc6369c..8f6a7b9dc63b32 100644 --- a/src/plugins/expressions/public/types/index.ts +++ b/src/plugins/expressions/public/types/index.ts @@ -40,7 +40,6 @@ export interface IExpressionLoaderParams { variables?: Record; // Enables debug tracking on each expression in the AST debug?: boolean; - disableCaching?: boolean; customFunctions?: []; customRenderers?: []; uiState?: unknown; @@ -67,6 +66,8 @@ export interface IExpressionLoaderParams { * By default, it equals 1000. */ throttle?: number; + + allowCache?: boolean; } export interface ExpressionRenderError extends Error { diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index 374d651c44d8fd..8aebc4778e201d 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -186,8 +186,8 @@ describe('Lens App', () => { query: { query: '', language: 'lucene' }, filters: [pinnedFilter], resolvedDateRange: { - fromDate: '2021-01-10T04:00:00.000Z', - toDate: '2021-01-10T08:00:00.000Z', + fromDate: 'now-7d', + toDate: 'now', }, }), }); @@ -1117,8 +1117,8 @@ describe('Lens App', () => { lens: expect.objectContaining({ query: { query: '', language: 'lucene' }, resolvedDateRange: { - fromDate: '2021-01-10T04:00:00.000Z', - toDate: '2021-01-10T08:00:00.000Z', + fromDate: 'now-7d', + toDate: 'now', }, }), }); @@ -1154,8 +1154,8 @@ describe('Lens App', () => { lens: expect.objectContaining({ query: { query: 'new', language: 'lucene' }, resolvedDateRange: { - fromDate: '2021-01-09T04:00:00.000Z', - toDate: '2021-01-09T08:00:00.000Z', + fromDate: 'now-14d', + toDate: 'now-7d', }, }), }); @@ -1454,8 +1454,8 @@ describe('Lens App', () => { type: 'lens/setState', payload: { resolvedDateRange: { - fromDate: '2021-01-10T04:00:00.000Z', - toDate: '2021-01-10T08:00:00.000Z', + fromDate: 'now-7d', + toDate: 'now', }, searchSessionId: 'sessionId-2', }, 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 0f9794ac77f31d..2cc7791f9f941b 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 @@ -37,7 +37,11 @@ import { useLensDispatch, } from '../../../state_management'; import type { TypedLensByValueInput } from '../../../embeddable/embeddable_component'; -import { EXPRESSION_BUILD_ERROR_ID, extractReferencesFromState } from '../../../utils'; +import { + EXPRESSION_BUILD_ERROR_ID, + extractReferencesFromState, + getAbsoluteDateRange, +} from '../../../utils'; import { LayerConfiguration } from './layer_configuration_section'; import type { EditConfigPanelProps } from './types'; import { FlyoutWrapper } from './flyout_wrapper'; @@ -94,6 +98,10 @@ export function LensEditConfigurationFlyout({ const framePublicAPI = useLensSelector((state) => selectFramePublicAPI(state, datasourceMap)); + framePublicAPI.absDateRange = getAbsoluteDateRange( + startDependencies.data.query.timefilter.timefilter + ); + const layers = useMemo( () => activeDatasource.getLayers(datasourceState), [activeDatasource, datasourceState] diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_editor.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_editor.tsx index d3f06e077d7f86..e182a3a84b9793 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_editor.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_editor.tsx @@ -109,6 +109,7 @@ export function FormulaEditor({ hasData, dateRange, uiSettings, + data, }: Omit, 'activeData'> & { dateHistogramInterval: ReturnType; hasData: boolean; @@ -452,7 +453,7 @@ export function FormulaEditor({ unifiedSearch, dataViews, dateHistogramInterval: baseIntervalRef.current, - dateRange, + timefilter: data.query.timefilter.timefilter, }); } } else { @@ -465,7 +466,7 @@ export function FormulaEditor({ unifiedSearch, dataViews, dateHistogramInterval: baseIntervalRef.current, - dateRange, + timefilter: data.query.timefilter.timefilter, }); } @@ -481,7 +482,7 @@ export function FormulaEditor({ ), }; }, - [indexPattern, visibleOperationsMap, unifiedSearch, dataViews, baseIntervalRef, dateRange] + [indexPattern, visibleOperationsMap, unifiedSearch, dataViews, data.query.timefilter.timefilter] ); const provideSignatureHelp = useCallback( diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts index 270aa5f2c1bb70..2dfe44f2086ffe 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts @@ -5,11 +5,13 @@ * 2.0. */ +import moment from 'moment'; import { parse } from '@kbn/tinymath'; import { monaco } from '@kbn/monaco'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { tinymathFunctions } from '@kbn/lens-formula-docs'; +import { TimefilterContract } from '@kbn/data-plugin/public'; import { createMockedIndexPattern } from '../../../../mocks'; import { GenericOperationDefinition } from '../..'; import type { OperationMetadata, IndexPatternField } from '../../../../../../types'; @@ -210,8 +212,6 @@ The total number of documents. When you provide a field, the total number of fie }); describe('autocomplete', () => { - const dateRange = { fromDate: '2022-11-01T00:00:00.000Z', toDate: '2022-11-03T00:00:00.000Z' }; - function getSuggestionArgs({ expression, zeroIndexedOffset, @@ -232,7 +232,13 @@ The total number of documents. When you provide a field, the total number of fie operationDefinitionMap, unifiedSearch: unifiedSearchPluginMock.createStartContract(), dataViews: dataViewPluginMocks.createStartContract(), - dateRange, + timefilter: { + getTime: () => ({ from: '2022-11-01T00:00:00.000Z', to: '2022-11-03T00:00:00.000Z' }), + calculateBounds: () => ({ + min: moment('2022-11-01T00:00:00.000Z'), + max: moment('2022-11-03T00:00:00.000Z'), + }), + } as unknown as TimefilterContract, }; } it('should list all valid functions at the top level (fake test)', async () => { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts index eac9f66c77107d..a09bcaa245b177 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts @@ -24,7 +24,8 @@ import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { parseTimeShift } from '@kbn/data-plugin/common'; import { tinymathFunctions } from '@kbn/lens-formula-docs'; import moment from 'moment'; -import { nonNullable } from '../../../../../../utils'; +import { TimefilterContract } from '@kbn/data-plugin/public'; +import { getAbsoluteDateRange, nonNullable } from '../../../../../../utils'; import { DateRange } from '../../../../../../../common/types'; import type { IndexPattern } from '../../../../../../types'; import { memoizedGetAvailableOperationsByMetadata } from '../../../operations'; @@ -150,7 +151,7 @@ export async function suggest({ dataViews, unifiedSearch, dateHistogramInterval, - dateRange, + timefilter, }: { expression: string; zeroIndexedOffset: number; @@ -160,7 +161,7 @@ export async function suggest({ unifiedSearch: UnifiedSearchPublicPluginStart; dataViews: DataViewsPublicPluginStart; dateHistogramInterval?: number; - dateRange: DateRange; + timefilter: TimefilterContract; }): Promise { const text = expression.substr(0, zeroIndexedOffset) + MARKER + expression.substr(zeroIndexedOffset); @@ -170,6 +171,8 @@ export async function suggest({ const tokenInfo = getInfoAtZeroIndexedPosition(ast, zeroIndexedOffset); const tokenAst = tokenInfo?.ast; + const dateRange = getAbsoluteDateRange(timefilter); + const isNamedArgument = tokenInfo?.parent && typeof tokenAst !== 'number' && diff --git a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts index feba325e5dfcf1..743efc9cb8db7e 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts @@ -22,6 +22,7 @@ import { ExpressionAstExpressionBuilder, ExpressionAstFunction, } from '@kbn/expressions-plugin/public'; +import { convertToAbsoluteDateRange } from '../../utils'; import type { DateRange } from '../../../common/types'; import { GenericIndexPatternColumn } from './form_based'; import { operationDefinitionMap } from './operations'; @@ -162,6 +163,8 @@ function getExpressionForLayer( const orderedColumnIds = esAggEntries.map(([colId]) => colId); let esAggsIdMap: Record = {}; + + const absDateRange = convertToAbsoluteDateRange(dateRange, nowInstant); const aggExpressionToEsAggsIdMap: Map = new Map(); esAggEntries.forEach(([colId, col], index) => { const def = operationDefinitionMap[col.operationType]; @@ -179,7 +182,7 @@ function getExpressionForLayer( ...col, timeShift: resolveTimeShift( col.timeShift, - dateRange, + absDateRange, histogramBarsTarget, hasDateHistogram ), @@ -207,7 +210,7 @@ function getExpressionForLayer( timeWindow: wrapInTimeFilter ? col.reducedTimeRange : undefined, timeShift: resolveTimeShift( col.timeShift, - dateRange, + absDateRange, histogramBarsTarget, hasDateHistogram ), @@ -216,7 +219,7 @@ function getExpressionForLayer( customMetric: buildExpression({ type: 'expression', chain: [aggAst] }), timeShift: resolveTimeShift( col.timeShift, - dateRange, + absDateRange, histogramBarsTarget, hasDateHistogram ), diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx index 5835c33c8d54a0..679de93b8ae1b5 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx @@ -392,6 +392,7 @@ describe('ConfigPanel', () => { a: expect.anything(), }, dateRange: expect.anything(), + absDateRange: expect.anything(), filters: [], now: expect.anything(), query: undefined, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx index 45b11b1c7724b5..e0736b149fcbb3 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx @@ -9,6 +9,7 @@ import React, { useCallback, useRef } from 'react'; import { CoreStart } from '@kbn/core/public'; import { ReactExpressionRendererType } from '@kbn/expressions-plugin/public'; import { type DragDropAction, DragDropIdentifier, RootDragDropProvider } from '@kbn/dom-drag-drop'; +import { getAbsoluteDateRange } from '../../utils'; import { trackUiCounterEvents } from '../../lens_ui_telemetry'; import { DatasourceMap, @@ -68,6 +69,10 @@ export function EditorFrame(props: EditorFrameProps) { selectFramePublicAPI(state, datasourceMap) ); + framePublicAPI.absDateRange = getAbsoluteDateRange( + props.plugins.data.query.timefilter.timefilter + ); + // Using a ref to prevent rerenders in the child components while keeping the latest state const getSuggestionForField = useRef<(field: DragDropIdentifier) => Suggestion | undefined>(); getSuggestionForField.current = (field: DragDropIdentifier) => { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index c659d726f7b8ad..c574d575bd5d90 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -772,6 +772,7 @@ export const VisualizationWrapper = ({ className="lnsExpressionRenderer__component" padding={displayOptions?.noPadding ? undefined : 'm'} expression={expression!} + allowCache={true} searchContext={searchContext} searchSessionId={searchSessionId} onEvent={onEvent} diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 3206947c2a9b70..daf1d078894e98 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -663,6 +663,10 @@ export class Embeddable fromDate: mergedSearchContext.timeRange?.from ?? '', toDate: mergedSearchContext.timeRange?.to ?? '', }, + absDateRange: { + fromDate: mergedSearchContext.timeRange?.from ?? '', + toDate: mergedSearchContext.timeRange?.to ?? '', + }, activeData: this.activeData, }; diff --git a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx index a8477a549d3ca6..d16df5bf9d1e83 100644 --- a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx +++ b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx @@ -80,6 +80,7 @@ export function ExpressionWrapper({ className="lnsExpressionRenderer__component" padding={noPadding ? undefined : 's'} variables={variables} + allowCache={true} expression={expression} interactive={interactive} searchContext={searchContext} diff --git a/x-pack/plugins/lens/public/mocks/index.ts b/x-pack/plugins/lens/public/mocks/index.ts index f8bf55e3c2e8f6..91da76b4acee6f 100644 --- a/x-pack/plugins/lens/public/mocks/index.ts +++ b/x-pack/plugins/lens/public/mocks/index.ts @@ -37,6 +37,10 @@ export type FrameMock = jest.Mocked; export const createMockFramePublicAPI = (overrides: Partial = {}): FrameMock => ({ datasourceLayers: {}, dateRange: { + fromDate: 'now-1d', + toDate: 'now', + }, + absDateRange: { fromDate: '2022-03-17T08:25:00.000Z', toDate: '2022-04-17T08:25:00.000Z', }, diff --git a/x-pack/plugins/lens/public/mocks/store_mocks.tsx b/x-pack/plugins/lens/public/mocks/store_mocks.tsx index 354b6cbac53c51..c1c3ada4ddf1c3 100644 --- a/x-pack/plugins/lens/public/mocks/store_mocks.tsx +++ b/x-pack/plugins/lens/public/mocks/store_mocks.tsx @@ -46,7 +46,7 @@ export const defaultState = { searchSessionId: 'sessionId-1', filters: [], query: { language: 'lucene', query: '' }, - resolvedDateRange: { fromDate: '2021-01-10T04:00:00.000Z', toDate: '2021-01-10T08:00:00.000Z' }, + resolvedDateRange: { fromDate: 'now-7d', toDate: 'now' }, isFullscreenDatasource: false, isSaveable: false, isLoading: false, diff --git a/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap b/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap index 68d4e7d57e983a..a1ae0da676803b 100644 --- a/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap +++ b/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap @@ -90,8 +90,8 @@ Object { "query": "", }, "resolvedDateRange": Object { - "fromDate": "2021-01-10T04:00:00.000Z", - "toDate": "2021-01-10T08:00:00.000Z", + "fromDate": "now-7d", + "toDate": "now", }, "searchSessionId": "sessionId-1", "sharingSavedObjectProps": Object { diff --git a/x-pack/plugins/lens/public/state_management/context_middleware/index.test.ts b/x-pack/plugins/lens/public/state_management/context_middleware/index.test.ts index 24254f4469f54d..65a80bb539bf59 100644 --- a/x-pack/plugins/lens/public/state_management/context_middleware/index.test.ts +++ b/x-pack/plugins/lens/public/state_management/context_middleware/index.test.ts @@ -69,8 +69,8 @@ describe('contextMiddleware', () => { expect(store.dispatch).toHaveBeenCalledWith({ payload: { resolvedDateRange: { - fromDate: '2021-01-10T04:00:00.000Z', - toDate: '2021-01-10T08:00:00.000Z', + fromDate: 'now-2m', + toDate: 'now', }, searchSessionId: 'sessionId-1', }, diff --git a/x-pack/plugins/lens/public/state_management/selectors.ts b/x-pack/plugins/lens/public/state_management/selectors.ts index 58c7d981dcb412..2187302ae02e42 100644 --- a/x-pack/plugins/lens/public/state_management/selectors.ts +++ b/x-pack/plugins/lens/public/state_management/selectors.ts @@ -237,6 +237,7 @@ export const selectFramePublicAPI = createSelector( activeData, dataViews, ...context, + absDateRange: context.dateRange, }; } ); diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 9175dce78ec171..9fab715a08d82f 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -955,6 +955,7 @@ export interface FramePublicAPI { filters: Filter[]; datasourceLayers: DatasourceLayers; dateRange: DateRange; + absDateRange: DateRange; /** * Data of the chart currently rendered in the preview. * This data might be not available (e.g. if the chart can't be rendered) or outdated and belonging to another chart. diff --git a/x-pack/plugins/lens/public/utils.ts b/x-pack/plugins/lens/public/utils.ts index d16dacada6fe10..83d0b841d0b2a6 100644 --- a/x-pack/plugins/lens/public/utils.ts +++ b/x-pack/plugins/lens/public/utils.ts @@ -18,6 +18,8 @@ import { emptyTitleText } from '@kbn/visualization-ui-components'; import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { ISearchStart } from '@kbn/data-plugin/public'; import type { DraggingIdentifier, DropType } from '@kbn/dom-drag-drop'; +import { getAbsoluteTimeRange } from '@kbn/data-plugin/common'; +import { DateRange } from '../common/types'; import type { Document } from './persistence/saved_object_store'; import { Datasource, @@ -46,6 +48,11 @@ export function getVisualizeGeoFieldMessage(fieldType: string) { } export const getResolvedDateRange = function (timefilter: TimefilterContract) { + const { from, to } = timefilter.getTime(); + return { fromDate: from, toDate: to }; +}; + +export const getAbsoluteDateRange = function (timefilter: TimefilterContract) { const { from, to } = timefilter.getTime(); const { min, max } = timefilter.calculateBounds({ from, @@ -54,6 +61,21 @@ export const getResolvedDateRange = function (timefilter: TimefilterContract) { return { fromDate: min?.toISOString() || from, toDate: max?.toISOString() || to }; }; +export const convertToAbsoluteDateRange = function (dateRange: DateRange, now: Date) { + const absRange = getAbsoluteTimeRange( + { + from: dateRange.fromDate as string, + to: dateRange.toDate as string, + }, + { forceNow: now } + ); + + return { + fromDate: absRange.from, + toDate: absRange.to, + }; +}; + export function containsDynamicMath(dateMathString: string) { return dateMathString.includes('now'); } diff --git a/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.test.ts b/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.test.ts index d953814621aad6..f6a601c06a1638 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.test.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.test.ts @@ -16,7 +16,10 @@ describe('annotations helpers', () => { getStaticDate( [], createMockFramePublicAPI({ - dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2022-02-01T00:00:00.000Z', + toDate: '2022-04-20T00:00:00.000Z', + }, }) ) ).toBe('2022-03-12T00:00:00.000Z'); @@ -34,7 +37,10 @@ describe('annotations helpers', () => { }, ], createMockFramePublicAPI({ - dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2022-02-01T00:00:00.000Z', + toDate: '2022-04-20T00:00:00.000Z', + }, }) ) ).toBe('2022-03-12T00:00:00.000Z'); @@ -76,7 +82,10 @@ describe('annotations helpers', () => { }, ], createMockFramePublicAPI({ - dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2022-02-01T00:00:00.000Z', + toDate: '2022-04-20T00:00:00.000Z', + }, activeData, }) ) @@ -119,7 +128,10 @@ describe('annotations helpers', () => { }, ], createMockFramePublicAPI({ - dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2022-02-01T00:00:00.000Z', + toDate: '2022-04-20T00:00:00.000Z', + }, activeData, }) ) @@ -174,7 +186,10 @@ describe('annotations helpers', () => { }, ], createMockFramePublicAPI({ - dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2022-02-01T00:00:00.000Z', + toDate: '2022-04-20T00:00:00.000Z', + }, activeData, }) ) @@ -263,7 +278,10 @@ describe('annotations helpers', () => { createMockFramePublicAPI({ activeData, - dateRange: { fromDate: '2020-02-01T00:00:00.000Z', toDate: '2022-09-20T00:00:00.000Z' }, + absDateRange: { + fromDate: '2020-02-01T00:00:00.000Z', + toDate: '2022-09-20T00:00:00.000Z', + }, }) ) ).toBe('2020-08-24T12:06:40.000Z'); diff --git a/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.tsx b/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.tsx index 0c821775dff203..7914bf81a717a8 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/annotations/helpers.tsx @@ -45,10 +45,10 @@ export const defaultRangeAnnotationLabel = i18n.translate( export function getStaticDate(dataLayers: XYDataLayerConfig[], frame: FramePublicAPI) { const dataLayersId = dataLayers.map(({ layerId }) => layerId); - const { activeData, dateRange } = frame; + const { activeData, absDateRange } = frame; - const dateRangeMinValue = moment(dateRange.fromDate).valueOf(); - const dateRangeMaxValue = moment(dateRange.toDate).valueOf(); + const dateRangeMinValue = moment(absDateRange.fromDate).valueOf(); + const dateRangeMaxValue = moment(absDateRange.toDate).valueOf(); const fallbackValue = moment((dateRangeMinValue + dateRangeMaxValue) / 2).toISOString(); if ( diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx index 4967dd7877dad6..750b493ea4b692 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx @@ -846,6 +846,7 @@ describe('xy_visualization', () => { }, }, dateRange: { fromDate: '2022-04-10T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, + absDateRange: { fromDate: '2022-04-10T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, }; }); diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/annotations_config_panel/annotations_panel.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/annotations_config_panel/annotations_panel.tsx index db4d43d01b9639..a53b38dc38e334 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/annotations_config_panel/annotations_panel.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/annotations_config_panel/annotations_panel.tsx @@ -111,12 +111,12 @@ export const AnnotationsPanel = ( const getEndTimestamp = ( datatableUtilities: DatatableUtilitiesService, startTime: string, - { activeData, dateRange }: FramePublicAPI, + { activeData, absDateRange }: FramePublicAPI, dataLayers: XYDataLayerConfig[] ) => { const startTimeNumber = moment(startTime).valueOf(); const dateRangeFraction = - (moment(dateRange.toDate).valueOf() - moment(dateRange.fromDate).valueOf()) * 0.1; + (moment(absDateRange.toDate).valueOf() - moment(absDateRange.fromDate).valueOf()) * 0.1; const fallbackValue = moment(startTimeNumber + dateRangeFraction).toISOString(); const dataLayersId = dataLayers.map(({ layerId }) => layerId); if ( From 828954853476596f7630f1aea6cc26b6f5e57046 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Mon, 20 May 2024 09:30:43 -0400 Subject: [PATCH 17/97] Fixing flaky `find` tests (#183746) Resolves https://github.com/elastic/kibana/issues/182263 Resolves https://github.com/elastic/kibana/issues/182284 Resolves https://github.com/elastic/kibana/issues/182314 ## Summary Missing `await` in the backfill tests caused a rule created for those tests not to finish getting deleted before the `find` tests ran --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../group1/tests/alerting/backfill/task_runner.ts | 2 +- .../group1/tests/alerting/find.ts | 14 ++++++++------ .../group1/tests/alerting/find_with_post.ts | 14 ++++++++------ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts index 6b555198e5effb..aa81a4713a8af6 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/task_runner.ts @@ -92,7 +92,7 @@ export default function createBackfillTaskRunnerTests({ getService }: FtrProvide await esTestIndexTool.setup(); }); afterEach(async () => { - objectRemover.removeAll(); + await objectRemover.removeAll(); await esTestIndexTool.destroy(); }); after(async () => { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts index 7abc1b134f01d6..e7461476a2996f 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts @@ -19,8 +19,10 @@ const findTestUtils = ( supertest: SuperTestAgent, supertestWithoutAuth: any ) => { - describe.skip(describeType, () => { - afterEach(() => objectRemover.removeAll()); + describe(describeType, () => { + afterEach(async () => { + await objectRemover.removeAll(); + }); for (const scenario of UserAtSpaceScenarios) { const { user, space } = scenario; @@ -651,12 +653,12 @@ export default function createFindTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - // Failing: See https://github.com/elastic/kibana/issues/182263 - // Failing: See https://github.com/elastic/kibana/issues/182284 - describe.skip('find', () => { + describe('find', () => { const objectRemover = new ObjectRemover(supertest); - afterEach(() => objectRemover.removeAll()); + afterEach(async () => { + await objectRemover.removeAll(); + }); findTestUtils('public', objectRemover, supertest, supertestWithoutAuth); findTestUtils('internal', objectRemover, supertest, supertestWithoutAuth); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find_with_post.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find_with_post.ts index 82956536c6d1aa..b407ee072a78b0 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find_with_post.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find_with_post.ts @@ -19,14 +19,14 @@ const findTestUtils = ( supertest: SuperTestAgent, supertestWithoutAuth: any ) => { - // FLAKY: https://github.com/elastic/kibana/issues/182314 - describe.skip(describeType, () => { - afterEach(() => objectRemover.removeAll()); + describe(describeType, () => { + afterEach(async () => { + await objectRemover.removeAll(); + }); for (const scenario of UserAtSpaceScenarios) { const { user, space } = scenario; - // FLAKY: https://github.com/elastic/kibana/issues/182314 - describe.skip(scenario.id, () => { + describe(scenario.id, () => { it('should handle find alert request appropriately', async () => { const { body: createdAlert } = await supertest .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) @@ -581,7 +581,9 @@ export default function createFindTests({ getService }: FtrProviderContext) { describe('find with post', () => { const objectRemover = new ObjectRemover(supertest); - afterEach(() => objectRemover.removeAll()); + afterEach(async () => { + await objectRemover.removeAll(); + }); findTestUtils('internal', objectRemover, supertest, supertestWithoutAuth); }); From 83345c5ec81692d76a41e46d1dcff51e429421f0 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Mon, 20 May 2024 16:02:17 +0200 Subject: [PATCH 18/97] Upgrade EUI to v94.5.0 (#183431) --- package.json | 2 +- .../src/__snapshots__/i18n_service.test.tsx.snap | 3 ++- .../src/i18n_eui_mapping.tsx | 14 +++++++++++--- .../impl/__snapshots__/code_editor.test.tsx.snap | 3 +++ src/dev/license_checker/config.ts | 2 +- .../__snapshots__/table_cell.test.tsx.snap | 6 ++++++ .../custom_timeline_data_grid_body.test.tsx.snap | 2 +- .../plugins/translations/translations/fr-FR.json | 1 - .../plugins/translations/translations/ja-JP.json | 1 - .../plugins/translations/translations/zh-CN.json | 1 - yarn.lock | 8 ++++---- 11 files changed, 29 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 04316640a2952b..d91a1752ead8e6 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.13.0", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "94.3.0", + "@elastic/eui": "94.5.0-backport.1", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 29a42c3a4c6547..fd8ba14e035cfc 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -6,8 +6,8 @@ exports[`#start() returns \`Context\` component 1`] = ` i18n={ Object { "mapping": Object { + "euiAbsoluteTab.dateFormatButtonLabel": "Parse date", "euiAbsoluteTab.dateFormatError": [Function], - "euiAbsoluteTab.dateFormatHint": "Press the Enter key to parse as a date.", "euiAccordionChildrenLoading.message": "Loading", "euiAutoRefresh.autoRefreshLabel": "Auto refresh", "euiAutoRefresh.buttonLabelOff": "Auto refresh is off", @@ -36,6 +36,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiCodeBlockFullScreen.fullscreenExpand": "Expand", "euiCollapsedItemActions.allActions": "All actions", "euiCollapsedItemActions.allActionsDisabled": "Individual item actions are disabled when rows are being selected.", + "euiCollapsedNavButton.ariaLabelButtonIcon": [Function], "euiCollapsibleNavBeta.ariaLabel": "Site menu", "euiCollapsibleNavButton.ariaLabelClose": "Close navigation", "euiCollapsibleNavButton.ariaLabelCollapse": "Collapse navigation", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index c7d290f3af603e..386e7a55da83b8 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -179,6 +179,11 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiCollapsibleNavBeta.ariaLabel': i18n.translate('core.euiCollapsibleNavBeta.ariaLabel', { defaultMessage: 'Site menu', }), + 'euiCollapsedNavButton.ariaLabelButtonIcon': ({ title }: EuiValues) => + i18n.translate('core.euiCollapsedNavButton.ariaLabelButtonIcon', { + defaultMessage: '{title}, quick navigation menu', + values: { title }, + }), 'euiCollapsibleNavButton.ariaLabelExpand': i18n.translate( 'core.euiCollapsibleNavButton.ariaLabelExpand', { defaultMessage: 'Expand navigation' } @@ -1413,9 +1418,12 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiRelativeTab.dateInputError': i18n.translate('core.euiRelativeTab.dateInputError', { defaultMessage: 'Must be a valid range', }), - 'euiAbsoluteTab.dateFormatHint': i18n.translate('core.euiAbsoluteTab.dateFormatHint', { - defaultMessage: 'Press the Enter key to parse as a date.', - }), + 'euiAbsoluteTab.dateFormatButtonLabel': i18n.translate( + 'core.euiAbsoluteTab.dateFormatButtonLabel', + { + defaultMessage: 'Parse date', + } + ), 'euiResizableButton.horizontalResizerAriaLabel': i18n.translate( 'core.euiResizableButton.horizontalResizerAriaLabel', { diff --git a/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap b/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap index df22190992fb35..b4b4fea7b22fd8 100644 --- a/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap +++ b/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap @@ -170,11 +170,13 @@ exports[` is rendered 1`] = ` isVisible={false} onBlur={[Function]} onFocus={[Function]} + onKeyDown={[Function]} onMouseOut={[Function]} onMouseOver={[Function]} > @@ -250,6 +252,7 @@ exports[` is rendered 1`] = ` /> diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index f73d44b46a9827..6b79cae3fac7b0 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.1': ['Elastic License 2.0'], - '@elastic/eui@94.3.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@94.5.0-backport.1': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/discover/public/components/doc_table/components/table_row/__snapshots__/table_cell.test.tsx.snap b/src/plugins/discover/public/components/doc_table/components/table_row/__snapshots__/table_cell.test.tsx.snap index 555be566a50829..a6449fd265492d 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row/__snapshots__/table_cell.test.tsx.snap +++ b/src/plugins/discover/public/components/doc_table/components/table_row/__snapshots__/table_cell.test.tsx.snap @@ -40,11 +40,13 @@ exports[`Doc table cell component renders a cell with filter buttons if it is fi isVisible={false} onBlur={[Function]} onFocus={[Function]} + onKeyDown={[Function]} onMouseOut={[Function]} onMouseOver={[Function]} > @@ -124,6 +126,7 @@ exports[`Doc table cell component renders a cell with filter buttons if it is fi /> @@ -164,11 +167,13 @@ exports[`Doc table cell component renders a cell with filter buttons if it is fi isVisible={false} onBlur={[Function]} onFocus={[Function]} + onKeyDown={[Function]} onMouseOut={[Function]} onMouseOver={[Function]} > @@ -248,6 +253,7 @@ exports[`Doc table cell component renders a cell with filter buttons if it is fi /> diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap index 3845ad9801abd0..2c8c9d593b775f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap @@ -212,7 +212,7 @@ exports[`CustomTimelineDataGridBody should render exactly as snapshots 1`] = ` test added a note

note diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 017acbe3704164..04b9e05b489576 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -686,7 +686,6 @@ "core.deprecations.elasticsearchUsername.manualSteps2": "Ajoutez le paramètre \"elasticsearch.serviceAccountToken\" à kibana.yml.", "core.deprecations.elasticsearchUsername.manualSteps3": "Supprimez \"elasticsearch.username\" et \"elasticsearch.password\" de kibana.yml.", "core.deprecations.noCorrectiveAction": "Ce déclassement ne peut pas être résolu automatiquement.", - "core.euiAbsoluteTab.dateFormatHint": "Appuyez sur la touche Entrée pour analyser l'élément en tant que date.", "core.euiAccordionChildrenLoading.message": "Chargement", "core.euiAutoRefresh.autoRefreshLabel": "Actualisation automatique", "core.euiAutoRefresh.buttonLabelOff": "L'actualisation automatique est désactivée", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index f03111faf3bd15..c6198a0e10efe8 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -686,7 +686,6 @@ "core.deprecations.elasticsearchUsername.manualSteps2": "「elasticsearch.serviceAccountToken」設定をkibana.ymlに追加します。", "core.deprecations.elasticsearchUsername.manualSteps3": "kibana.ymlから「elasticsearch.username」と「elasticsearch.password」を削除します。", "core.deprecations.noCorrectiveAction": "この廃止予定は自動的に解決できません。", - "core.euiAbsoluteTab.dateFormatHint": "日付として解析するには、Enterキーを押してください。", "core.euiAccordionChildrenLoading.message": "読み込み中", "core.euiAutoRefresh.autoRefreshLabel": "自動更新", "core.euiAutoRefresh.buttonLabelOff": "自動更新はオフです", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 968e567a714bd5..3d5c64342c7a89 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -688,7 +688,6 @@ "core.deprecations.elasticsearchUsername.manualSteps2": "将“elasticsearch.serviceAccountToken”设置添加到 kibana.yml。", "core.deprecations.elasticsearchUsername.manualSteps3": "从 kibana.yml 中移除“elasticsearch.username”和“elasticsearch.password”。", "core.deprecations.noCorrectiveAction": "无法自动解决此弃用。", - "core.euiAbsoluteTab.dateFormatHint": "按 Enter 键解析为日期。", "core.euiAccordionChildrenLoading.message": "正在加载", "core.euiAutoRefresh.autoRefreshLabel": "自动刷新", "core.euiAutoRefresh.buttonLabelOff": "自动刷新已关闭", diff --git a/yarn.lock b/yarn.lock index 63f50a8f16e937..b32d917f64ce64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1735,10 +1735,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@94.3.0": - version "94.3.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-94.3.0.tgz#77c07701128b6443e2ea55e2462ef0ccadd64582" - integrity sha512-qJTLrQYe11MPTX+8AqifJVYLDyO8VqdFWqPVJRYel11l/FvJOqyQi50x+xQK8I7h73TF50xywtUHCfhfkqpbYg== +"@elastic/eui@94.5.0-backport.1": + version "94.5.0-backport.1" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-94.5.0-backport.1.tgz#b26b06c9d4823b80b6c2a4457edfd6cd0cb8ebad" + integrity sha512-K6xVQYZjhdZyHNANw4H45ONw2pbZEJtaKr3Aul+dIQmYSRs0NgZbZyjt5fiLMaHJz2EFIpDEZMFccW6l0Aiukg== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" From 88baf9a96eb2c1989296eb55503ad31a8e0e27c8 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Mon, 20 May 2024 15:04:07 +0100 Subject: [PATCH 19/97] [ML] Re-enabling trained models test (#183820) This failure was caused by an API test which downloads ELSER but doesn't delete afterwards. That test has been [skipped](https://github.com/elastic/kibana/pull/183705). --- .../functional/test_suites/security/ml/trained_models_list.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/security/ml/trained_models_list.ts b/x-pack/test_serverless/functional/test_suites/security/ml/trained_models_list.ts index 8e6928b9817a24..745f2b8d4a65f5 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ml/trained_models_list.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ml/trained_models_list.ts @@ -11,10 +11,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const svlMl = getService('svlMl'); const PageObjects = getPageObjects(['svlCommonPage']); - // failsOnMKI, see https://github.com/elastic/kibana/issues/180481 describe('Trained models list', function () { - this.tags(['failsOnMKI']); - before(async () => { await PageObjects.svlCommonPage.login(); await ml.api.syncSavedObjects(); From e450763e1240d87fad1ca96308081932a3ee624f Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Mon, 20 May 2024 16:06:38 +0200 Subject: [PATCH 20/97] [Search] [Playground] Fix bedrock action client (#183828) Fix ActionsClientLLM to make it works with Bedrock connector in Playground. --- .../server/lib/get_chat_params.test.ts | 11 ++++++++++- .../search_playground/server/lib/get_chat_params.ts | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/search_playground/server/lib/get_chat_params.test.ts b/x-pack/plugins/search_playground/server/lib/get_chat_params.test.ts index cb409461d0a48e..624f6e0aa637f7 100644 --- a/x-pack/plugins/search_playground/server/lib/get_chat_params.test.ts +++ b/x-pack/plugins/search_playground/server/lib/get_chat_params.test.ts @@ -84,7 +84,16 @@ describe('getChatParams', () => { context: true, type: 'anthropic', }); - expect(ActionsClientLlm).toHaveBeenCalledWith(expect.anything()); + expect(ActionsClientLlm).toHaveBeenCalledWith({ + temperature: 0, + llmType: 'bedrock', + traceId: 'test-uuid', + request: expect.anything(), + logger: expect.anything(), + model: 'custom-model', + connectorId: '2', + actions: expect.anything(), + }); expect(result.chatPrompt).toContain('How does it work?'); }); diff --git a/x-pack/plugins/search_playground/server/lib/get_chat_params.ts b/x-pack/plugins/search_playground/server/lib/get_chat_params.ts index 2dba42c668c77b..8a5aeb68c7e761 100644 --- a/x-pack/plugins/search_playground/server/lib/get_chat_params.ts +++ b/x-pack/plugins/search_playground/server/lib/get_chat_params.ts @@ -16,6 +16,7 @@ import type { PluginStartContract as ActionsPluginStartContract } from '@kbn/act import type { KibanaRequest, Logger } from '@kbn/core/server'; import { BaseLanguageModel } from '@langchain/core/language_models/base'; import type { Connector } from '@kbn/actions-plugin/server/application/connector/types'; +import { getDefaultArguments } from '@kbn/elastic-assistant-common/impl/language_models/constants'; import { Prompt } from '../../common/prompt'; export const getChatParams = async ( @@ -52,6 +53,7 @@ export const getChatParams = async ( model, traceId: uuidv4(), signal: abortSignal, + temperature: getDefaultArguments().temperature, // prevents the agent from retrying on failure // failure could be due to bad connector, we should deliver that result to the client asap maxRetries: 0, @@ -63,6 +65,7 @@ export const getChatParams = async ( }); break; case BEDROCK_CONNECTOR_ID: + const llmType = 'bedrock'; chatModel = new ActionsClientLlm({ actions, logger, @@ -70,6 +73,8 @@ export const getChatParams = async ( connectorId, model, traceId: uuidv4(), + llmType, + temperature: getDefaultArguments(llmType).temperature, }); chatPrompt = Prompt(prompt, { citations, From a9cb7d2423f135214b2c6df945b667296cb75176 Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Mon, 20 May 2024 16:18:11 +0200 Subject: [PATCH 21/97] [Search] [Playground] FTR tests (#183329) Approach with different configs for kibana ui and serverless was peek out from security_solution test. 48 serverless config files are defined in the test folder. Test: no index check no index message Test: no connector Add Index of example data (can be 10 docs into elasticsearch, BM25) Add a connector (showing the modal) verify the modal is shown Test: with connector seed ES with a connector in the test Ask a question Validate the connector has been called and respond back validate the response is returned validate the view query can be opened and content (query + fields) is as expected validate the edit context is can be opened and the fields is as expected --- .buildkite/ftr_configs.yml | 1 + .../public/chat_playground_overview.tsx | 20 ++- .../public/components/chat.tsx | 2 + .../edit_context/edit_context_action.tsx | 6 +- .../edit_context/edit_context_flyout.tsx | 3 +- .../components/message_list/user_message.tsx | 1 + .../public/components/question_input.tsx | 1 + .../sources_panel/add_indices_field.tsx | 1 + .../public/components/start_new_chat.tsx | 5 +- .../components/view_code/view_code_action.tsx | 1 + .../components/view_code/view_code_flyout.tsx | 2 +- .../view_query/view_query_action.tsx | 6 +- .../view_query/view_query_flyout.tsx | 3 +- .../apps/search_playground/config.ts | 17 +++ .../apps/search_playground/index.ts | 13 ++ .../playground_overview.ess.ts | 94 ++++++++++++ .../utils/create_openai_connector.ts | 50 +++++++ x-pack/test/functional/page_objects/index.ts | 2 + .../page_objects/search_playground_page.ts | 114 +++++++++++++++ .../functional/page_objects/index.ts | 2 - .../page_objects/svl_playground_page.ts | 26 ---- .../test_suites/search/playground_overview.ts | 136 ++++++++++++++++-- 22 files changed, 456 insertions(+), 50 deletions(-) create mode 100644 x-pack/test/functional/apps/search_playground/config.ts create mode 100644 x-pack/test/functional/apps/search_playground/index.ts create mode 100644 x-pack/test/functional/apps/search_playground/playground_overview.ess.ts create mode 100644 x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts create mode 100644 x-pack/test/functional/page_objects/search_playground_page.ts delete mode 100644 x-pack/test_serverless/functional/page_objects/svl_playground_page.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 9a73a5a00e8d62..052f6623dc1a6b 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -322,6 +322,7 @@ enabled: - x-pack/test/functional/apps/saved_query_management/config.ts - x-pack/test/functional/apps/security/config.ts - x-pack/test/functional/apps/slo/embeddables/config.ts + - x-pack/test/functional/apps/search_playground/config.ts - x-pack/test/functional/apps/snapshot_restore/config.ts - x-pack/test/functional/apps/spaces/config.ts - x-pack/test/functional/apps/spaces/in_solution_navigation/config.ts diff --git a/x-pack/plugins/search_playground/public/chat_playground_overview.tsx b/x-pack/plugins/search_playground/public/chat_playground_overview.tsx index d40996ba91455a..c6443c912bda09 100644 --- a/x-pack/plugins/search_playground/public/chat_playground_overview.tsx +++ b/x-pack/plugins/search_playground/public/chat_playground_overview.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import React, { useMemo } from 'react'; -import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiPageTemplate } from '@elastic/eui'; +import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiPageTemplate, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { PlaygroundProvider } from './providers/playground_provider'; @@ -39,15 +39,21 @@ export const ChatPlaygroundOverview: React.FC = () => { grow={false} > .euiFlexGroup': { flexWrap: 'wrap' } }} pageTitle={ - - - + +

+ +

+ { component="form" css={{ display: 'flex', flexGrow: 1 }} onSubmit={handleSubmit(onSubmit)} + data-test-subj="chatPage" > { isLoading={isSubmitting} isDisabled={!isValid} iconType={TelegramIcon} + data-test-subj="sendQuestionButton" /> ) } diff --git a/x-pack/plugins/search_playground/public/components/edit_context/edit_context_action.tsx b/x-pack/plugins/search_playground/public/components/edit_context/edit_context_action.tsx index 45e956472bf9aa..6e9a638248660a 100644 --- a/x-pack/plugins/search_playground/public/components/edit_context/edit_context_action.tsx +++ b/x-pack/plugins/search_playground/public/components/edit_context/edit_context_action.tsx @@ -22,7 +22,11 @@ export const EditContextAction: React.FC = () => { return ( <> {showFlyout && } - setShowFlyout(true)} disabled={selectedIndices?.length === 0}> + setShowFlyout(true)} + disabled={selectedIndices?.length === 0} + data-test-subj="editContextActionButton" + > = ({ onClose }) }, [usageTracker]); return ( - +

@@ -172,6 +172,7 @@ export const EditContextFlyout: React.FC = ({ onClose }) options={group.source_fields.map((field) => ({ value: field, inputDisplay: field, + 'data-test-subj': 'contextField', }))} valueOfSelected={tempSourceFields[index]?.[0]} onChange={(value) => updateSourceField(index, value)} diff --git a/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx b/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx index b2ad7d6e1b647b..12c1d862834041 100644 --- a/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx +++ b/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx @@ -57,6 +57,7 @@ export const UserMessage: React.FC = ({ content, createdAt }) })} /> } + data-test-subj="userMessage" >

{content}

diff --git a/x-pack/plugins/search_playground/public/components/question_input.tsx b/x-pack/plugins/search_playground/public/components/question_input.tsx index 0077e2ac7bf730..cdc9d347e4ff85 100644 --- a/x-pack/plugins/search_playground/public/components/question_input.tsx +++ b/x-pack/plugins/search_playground/public/components/question_input.tsx @@ -66,6 +66,7 @@ export const QuestionInput: React.FC = ({ onChange={handleChange} disabled={isDisabled} resize="none" + data-test-subj="questionInput" />
= ({ disabled: selectedIndices.includes(index), }))} isClearable={false} + data-test-subj="selectIndicesComboBox" /> ); diff --git a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx index 0db891438cb3d0..46d3896e9e953c 100644 --- a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx +++ b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx @@ -41,7 +41,7 @@ export const StartNewChat: React.FC = ({ onStartClick }) => { }, [usageTracker]); return ( - + = ({ onStartClick }) => { - + = ({ onStartClick }) => { !watch(ChatFormFields.elasticsearchQuery, '') } onClick={onStartClick} + data-test-subj="startChatButton" > { fill onClick={() => setShowFlyout(true)} disabled={!selectedIndices || selectedIndices?.length === 0} + data-test-subj="viewCodeActionButton" > = ({ onClose }) => { }, [usageTracker, selectedLanguage]); return ( - +

diff --git a/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx b/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx index 9b691283bab90f..53d01dc81d6148 100644 --- a/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx +++ b/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx @@ -20,7 +20,11 @@ export const ViewQueryAction: React.FC = () => { return ( <> {showFlyout && setShowFlyout(false)} />} - setShowFlyout(true)} disabled={selectedIndices?.length === 0}> + setShowFlyout(true)} + disabled={selectedIndices?.length === 0} + data-test-subj="viewQueryActionButton" + > = ({ onClose }) => }, [usageTracker]); return ( - +

@@ -216,6 +216,7 @@ export const ViewQueryFlyout: React.FC = ({ onClose }) => /> ), checked: checked ? 'on' : undefined, + 'data-test-subj': 'queryField', }; })} listProps={{ diff --git a/x-pack/test/functional/apps/search_playground/config.ts b/x-pack/test/functional/apps/search_playground/config.ts new file mode 100644 index 00000000000000..d0d07ff2002816 --- /dev/null +++ b/x-pack/test/functional/apps/search_playground/config.ts @@ -0,0 +1,17 @@ +/* + * 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 { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + + return { + ...functionalConfig.getAll(), + testFiles: [require.resolve('.')], + }; +} diff --git a/x-pack/test/functional/apps/search_playground/index.ts b/x-pack/test/functional/apps/search_playground/index.ts new file mode 100644 index 00000000000000..f15cbe91798684 --- /dev/null +++ b/x-pack/test/functional/apps/search_playground/index.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. + */ +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('playground', async () => { + loadTestFile(require.resolve('./playground_overview.ess.ts')); + }); +} diff --git a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts new file mode 100644 index 00000000000000..48f6d5e13cf880 --- /dev/null +++ b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; +import { createOpenAIConnector } from './utils/create_openai_connector'; +import { MachineLearningCommonAPIProvider } from '../../services/ml/common_api'; + +const indexName = 'basic_index'; +const esArchiveIndex = 'test/api_integration/fixtures/es_archiver/index_patterns/basic_index'; + +export default function (ftrContext: FtrProviderContext) { + const { getService, getPageObjects } = ftrContext; + const pageObjects = getPageObjects(['common', 'searchPlayground']); + const commonAPI = MachineLearningCommonAPIProvider(ftrContext); + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + const createIndex = async () => await esArchiver.load(esArchiveIndex); + let removeOpenAIConnector: () => Promise; + const createConnector = async () => { + removeOpenAIConnector = await createOpenAIConnector({ + supertest, + requestHeader: commonAPI.getCommonRequestHeader(), + }); + }; + + describe('Playground Overview', () => { + before(async () => { + await pageObjects.common.navigateToApp('enterpriseSearchApplications/playground'); + }); + + after(async () => { + await esArchiver.unload(esArchiveIndex); + await removeOpenAIConnector?.(); + }); + + describe('start chat page', () => { + it('playground app is loaded', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectPlaygroundStartChatPageComponentsToExist(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectPlaygroundHeaderComponentsToExist(); + }); + + it('show no index callout', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectNoIndexCalloutExists(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectCreateIndexButtonToExists(); + }); + + it('hide no index callout when index added', async () => { + await createIndex(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectSelectIndex(indexName); + }); + + it('show add connector button', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectAddConnectorButtonExists(); + }); + + it('click add connector button opens connector flyout', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectOpenConnectorPagePlayground(); + }); + + it('hide gen ai panel when connector exists', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectHideGenAIPanelConnector( + createConnector + ); + }); + + it('show chat page', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectSelectIndex(indexName); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectToStartChatPage(); + }); + }); + + describe('chat page', () => { + it('chat works', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectChatWorks(); + }); + + it('open view code', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectOpenViewCode(); + }); + + it('show fields and code in view query', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectViewQueryHasFields(); + }); + + it('show edit context', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectEditContextOpens(); + }); + }); + }); +} diff --git a/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts b/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts new file mode 100644 index 00000000000000..864e4246647857 --- /dev/null +++ b/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts @@ -0,0 +1,50 @@ +/* + * 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 SuperTest from 'supertest'; + +export async function createOpenAIConnector({ + supertest, + requestHeader = {}, + apiKeyHeader = {}, +}: { + supertest: SuperTest.Agent; + requestHeader?: Record; + apiKeyHeader?: Record; +}): Promise<() => Promise> { + const config = { + apiProvider: 'OpenAI', + defaultModel: 'gpt-4', + apiUrl: 'http://localhost:3002', + }; + + const connector: { id: string } | undefined = ( + await supertest + .post('/api/actions/connector') + .set(requestHeader) + .set(apiKeyHeader) + .send({ + name: 'test Open AI', + connector_type_id: '.gen-ai', + config, + secrets: { + apiKey: 'genAiApiKey', + }, + }) + .expect(200) + ).body; + + return async () => { + if (connector) { + await supertest + .delete(`/api/actions/connector/${connector.id}`) + .set(requestHeader) + .set(apiKeyHeader) + .expect(204); + } + }; +} diff --git a/x-pack/test/functional/page_objects/index.ts b/x-pack/test/functional/page_objects/index.ts index 7a459ad74f9802..155bc0901ae4d4 100644 --- a/x-pack/test/functional/page_objects/index.ts +++ b/x-pack/test/functional/page_objects/index.ts @@ -53,6 +53,7 @@ import { UptimePageObject } from './uptime_page'; import { UserProfilePageProvider } from './user_profile_page'; import { WatcherPageObject } from './watcher_page'; import { SearchProfilerPageProvider } from './search_profiler_page'; +import { SearchPlaygroundPageProvider } from './search_playground_page'; // just like services, PageObjects are defined as a map of // names to Providers. Merge in Kibana's or pick specific ones @@ -93,6 +94,7 @@ export const pageObjects = { roleMappings: RoleMappingsPageProvider, rollup: RollupPageObject, searchProfiler: SearchProfilerPageProvider, + searchPlayground: SearchPlaygroundPageProvider, searchSessionsManagement: SearchSessionsPageProvider, security: SecurityPageObject, shareSavedObjectsToSpace: ShareSavedObjectsToSpacePageProvider, diff --git a/x-pack/test/functional/page_objects/search_playground_page.ts b/x-pack/test/functional/page_objects/search_playground_page.ts new file mode 100644 index 00000000000000..35e0a8cc253d35 --- /dev/null +++ b/x-pack/test/functional/page_objects/search_playground_page.ts @@ -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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export function SearchPlaygroundPageProvider({ getService }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const comboBox = getService('comboBox'); + const browser = getService('browser'); + + return { + PlaygroundStartChatPage: { + async expectPlaygroundStartChatPageComponentsToExist() { + await testSubjects.existOrFail('startChatPage'); + await testSubjects.existOrFail('selectIndicesChatPanel'); + await testSubjects.existOrFail('startChatButton'); + }, + + async expectPlaygroundHeaderComponentsToExist() { + await testSubjects.existOrFail('playground-header-actions'); + await testSubjects.existOrFail('playground-documentation-link'); + }, + + async expectCreateIndexButtonToMissed() { + await testSubjects.missingOrFail('createIndexButton'); + }, + + async expectCreateIndexButtonToExists() { + await testSubjects.existOrFail('createIndexButton'); + }, + + async expectNoIndexCalloutExists() { + await testSubjects.existOrFail('createIndexCallout'); + }, + + async expectSelectIndex(indexName: string) { + await browser.refresh(); + await testSubjects.missingOrFail('createIndexCallout'); + await testSubjects.existOrFail('selectIndicesComboBox'); + await comboBox.setCustom('selectIndicesComboBox', indexName); + }, + + async expectNoIndicesFieldsWarningExists() { + await testSubjects.existOrFail('NoIndicesFieldsMessage'); + }, + + async expectAddConnectorButtonExists() { + await testSubjects.existOrFail('setupGenAIConnectorButton'); + }, + + async expectOpenConnectorPagePlayground() { + await testSubjects.click('setupGenAIConnectorButton'); + await testSubjects.existOrFail('create-connector-flyout'); + }, + + async expectHideGenAIPanelConnector(createConnector: () => Promise) { + await createConnector(); + await browser.refresh(); + await testSubjects.missingOrFail('connectToLLMChatPanel'); + }, + + async expectToStartChatPage() { + expect(await testSubjects.isEnabled('startChatButton')).to.be(true); + await testSubjects.click('startChatButton'); + await testSubjects.existOrFail('chatPage'); + }, + }, + PlaygroundChatPage: { + async expectChatWorks() { + await testSubjects.existOrFail('questionInput'); + await testSubjects.setValue('questionInput', 'test question'); + await testSubjects.click('sendQuestionButton'); + await testSubjects.existOrFail('userMessage'); + }, + + async expectOpenViewCode() { + await testSubjects.click('viewCodeActionButton'); + await testSubjects.existOrFail('viewCodeFlyout'); + await testSubjects.click('euiFlyoutCloseButton'); + }, + + async expectViewQueryHasFields() { + await testSubjects.click('viewQueryActionButton'); + await testSubjects.existOrFail('viewQueryFlyout'); + const fields = await testSubjects.findAll('queryField'); + + expect(fields.length).to.be(1); + + const codeBlock = await testSubjects.find('ViewElasticsearchQueryResult'); + const code = await codeBlock.getVisibleText(); + expect(code.replace(/ /g, '')).to.be( + '{\n"retriever":{\n"standard":{\n"query":{\n"multi_match":{\n"query":"{query}",\n"fields":[\n"baz"\n]\n}\n}\n}\n}\n}' + ); + await testSubjects.click('euiFlyoutCloseButton'); + }, + + async expectEditContextOpens() { + await testSubjects.click('editContextActionButton'); + await testSubjects.existOrFail('editContextFlyout'); + await testSubjects.click('contextFieldsSelectable_basic_index'); + await testSubjects.existOrFail('contextField'); + const fields = await testSubjects.findAll('contextField'); + + expect(fields.length).to.be(1); + await testSubjects.click('euiFlyoutCloseButton'); + }, + }, + }; +} diff --git a/x-pack/test_serverless/functional/page_objects/index.ts b/x-pack/test_serverless/functional/page_objects/index.ts index ebc85de7d332c2..f1604d48508e2f 100644 --- a/x-pack/test_serverless/functional/page_objects/index.ts +++ b/x-pack/test_serverless/functional/page_objects/index.ts @@ -21,7 +21,6 @@ import { SvlRuleDetailsPageProvider } from './svl_rule_details_ui_page'; import { SvlSearchConnectorsPageProvider } from './svl_search_connectors_page'; import { SvlManagementPageProvider } from './svl_management_page'; import { SvlIngestPipelines } from './svl_ingest_pipelines'; -import { SvlPlaygroundPageProvider } from './svl_playground_page'; export const pageObjects = { ...xpackFunctionalPageObjects, @@ -39,5 +38,4 @@ export const pageObjects = { svlRuleDetailsUI: SvlRuleDetailsPageProvider, svlManagementPage: SvlManagementPageProvider, svlIngestPipelines: SvlIngestPipelines, - svlPlaygroundUI: SvlPlaygroundPageProvider, }; diff --git a/x-pack/test_serverless/functional/page_objects/svl_playground_page.ts b/x-pack/test_serverless/functional/page_objects/svl_playground_page.ts deleted file mode 100644 index e0c26c031eb50d..00000000000000 --- a/x-pack/test_serverless/functional/page_objects/svl_playground_page.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FtrProviderContext } from '../ftr_provider_context'; - -export function SvlPlaygroundPageProvider({ getService }: FtrProviderContext) { - const testSubjects = getService('testSubjects'); - return { - PlaygrounStartChatPage: { - async expectPlaygroundStartChatPageComponentsToExist() { - await testSubjects.existOrFail('chat-playground-home-page-title'); - await testSubjects.existOrFail('selectIndicesChatPanel'); - await testSubjects.existOrFail('startChatButton'); - }, - - async expectPlaygroundHeaderComponentsToExist() { - await testSubjects.existOrFail('playground-header-actions'); - await testSubjects.existOrFail('playground-documentation-link'); - }, - }, - }; -} diff --git a/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts b/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts index f726287de0fb78..0a75db15454401 100644 --- a/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts +++ b/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts @@ -5,24 +5,144 @@ * 2.0. */ -import { FtrProviderContext } from '../../ftr_provider_context'; +import type SuperTest from 'supertest'; import { testHasEmbeddedConsole } from './embedded_console'; +import { FtrProviderContext } from '../../ftr_provider_context'; +import { RoleCredentials } from '../../../shared/services'; + +const indexName = 'basic_index'; +const esArchiveIndex = 'test/api_integration/fixtures/es_archiver/index_patterns/basic_index'; +async function createOpenAIConnector({ + supertest, + requestHeader = {}, + apiKeyHeader = {}, +}: { + supertest: SuperTest.Agent; + requestHeader?: Record; + apiKeyHeader?: Record; +}): Promise<() => Promise> { + const config = { + apiProvider: 'OpenAI', + defaultModel: 'gpt-4', + apiUrl: 'http://localhost:3002', + }; + + const connector: { id: string } | undefined = ( + await supertest + .post('/api/actions/connector') + .set(requestHeader) + .set(apiKeyHeader) + .send({ + name: 'test Open AI', + connector_type_id: '.gen-ai', + config, + secrets: { + apiKey: 'genAiApiKey', + }, + }) + .expect(200) + ).body; + + return async () => { + if (connector) { + await supertest + .delete(`/api/actions/connector/${connector.id}`) + .set(requestHeader) + .set(apiKeyHeader) + .expect(204); + } + }; +} + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects(['svlCommonPage', 'svlCommonNavigation', 'searchPlayground']); + const svlCommonApi = getService('svlCommonApi'); + const svlUserManager = getService('svlUserManager'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const esArchiver = getService('esArchiver'); + const createIndex = async () => await esArchiver.load(esArchiveIndex); + let roleAuthc: RoleCredentials; + + describe('Serverless Playground Overview', () => { + let removeOpenAIConnector: () => Promise; + let createConnector: () => Promise; -export default function ({ getPageObjects }: FtrProviderContext) { - const pageObjects = getPageObjects(['svlCommonPage', 'svlCommonNavigation', 'svlPlaygroundUI']); - describe('Playground', function () { before(async () => { await pageObjects.svlCommonPage.login(); - await pageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'searchPlayground' }); + await pageObjects.svlCommonNavigation.sidenav.clickLink({ + deepLinkId: 'searchPlayground', + }); + + const requestHeader = svlCommonApi.getInternalRequestHeader(); + roleAuthc = await svlUserManager.createApiKeyForRole('admin'); + createConnector = async () => { + removeOpenAIConnector = await createOpenAIConnector({ + supertest: supertestWithoutAuth, + requestHeader, + apiKeyHeader: roleAuthc.apiKeyHeader, + }); + }; }); after(async () => { + await removeOpenAIConnector?.(); + await esArchiver.unload(esArchiveIndex); + await svlUserManager.invalidateApiKeyForRole(roleAuthc); await pageObjects.svlCommonPage.forceLogout(); }); - it('playground app is loaded', async () => { - await pageObjects.svlPlaygroundUI.PlaygrounStartChatPage.expectPlaygroundStartChatPageComponentsToExist(); - await pageObjects.svlPlaygroundUI.PlaygrounStartChatPage.expectPlaygroundHeaderComponentsToExist(); + describe('start chat page', () => { + it('playground app is loaded', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectPlaygroundStartChatPageComponentsToExist(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectPlaygroundHeaderComponentsToExist(); + }); + + it('show no index callout', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectNoIndexCalloutExists(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectCreateIndexButtonToMissed(); + }); + + it('hide no index callout when index added', async () => { + await createIndex(); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectSelectIndex(indexName); + }); + + it('show add connector button', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectAddConnectorButtonExists(); + }); + + it('click add connector button opens connector flyout', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectOpenConnectorPagePlayground(); + }); + + it('hide gen ai panel when connector exists', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectHideGenAIPanelConnector( + createConnector + ); + }); + + it('show chat page', async () => { + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectSelectIndex(indexName); + await pageObjects.searchPlayground.PlaygroundStartChatPage.expectToStartChatPage(); + }); + }); + + describe('chat page', () => { + it('chat works', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectChatWorks(); + }); + + it('open view code', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectOpenViewCode(); + }); + + it('show fields and code in view query', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectViewQueryHasFields(); + }); + + it('show edit context', async () => { + await pageObjects.searchPlayground.PlaygroundChatPage.expectEditContextOpens(); + }); }); it('has embedded console', async () => { From 23637b142b3f05f4cd97e8b82077639f869140de Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 16:08:13 +0100 Subject: [PATCH 22/97] skip flaky suite (#183196) --- .../accessibility/apps/group3/ml_embeddables_in_dashboard.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts b/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts index c3278b39096c7c..39a10547c57b97 100644 --- a/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts +++ b/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts @@ -81,7 +81,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); for (const testData of testDataList) { - describe(testData.suiteSuffix, function () { + // FLAKY: https://github.com/elastic/kibana/issues/183196 + describe.skip(testData.suiteSuffix, function () { before(async () => { await ml.api.createAndRunAnomalyDetectionLookbackJob( testData.jobConfig, From a5d1b8c2d819a31e687052029f060f76dc486797 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 20 May 2024 18:12:18 +0300 Subject: [PATCH 23/97] fix: [Obs AI Ops > Anomaly Detection][KEYBOARD]: Single time series analysis popover must be scrollable using arrow keys (#183730) Closes: https://github.com/elastic/observability-dev/issues/3395 ## Description The Obs Anomaly Detection Single Metric Viewer and Anomaly Explorer have a help popouts with a long block of text. This popout can be accessed by keyboard, but the text inside cannot be scrolled using arrow keys. This means the information is not available to keyboard users and must be remediated. Screenshot attached below. ### Steps to recreate 1. Open the [Obs Anomaly Detection](https://issue-serverless-alpbx-pr180406-c06b1b.kb.eu-west-1.aws.qa.elastic.cloud/app/ml/jobs) view 2. Create a new anomaly detection job 3. From the Anomaly Detection Jobs table, click the Single Metric Viewer icon 4. On the Single Metric Viewer view, tab to the life preserver icon, and press `Enter` 5. Press the `Down_Arrow` key when the popover is visible 6. Confirm the text cannot be scrolled by keyboard, but can be scrolled by mouse wheel/scroll event ### What was changed?: 1. Added the "eui-scrollBar" class and set tabIndex={0} to the text container. See https://eui.elastic.co/#/utilities/scroll#scroll-bar-style ### Screen: Changes were applied to the `HelpPopover` and fix all places where that wrapper is utilized. https://github.com/elastic/kibana/assets/20072247/977e9a35-a345-45a8-9a33-9683420aef63 --- .../public/application/components/help_popover/help_popover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/ml/public/application/components/help_popover/help_popover.tsx b/x-pack/plugins/ml/public/application/components/help_popover/help_popover.tsx index aa7bf496b10513..eccfe901d3c3bf 100644 --- a/x-pack/plugins/ml/public/application/components/help_popover/help_popover.tsx +++ b/x-pack/plugins/ml/public/application/components/help_popover/help_popover.tsx @@ -51,7 +51,7 @@ export const HelpPopover: FC> = ({ > {title && {title}} - + {children} From 0f159b7488d1e1a823f1c49ae155586cbef345f1 Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Mon, 20 May 2024 08:35:51 -0700 Subject: [PATCH 24/97] [ResponseOps] rules runs recovered actions without ever running active actions (#183646) Resolves https://github.com/elastic/kibana/issues/182888 ## Summary This PR resolves a bug where rules will run the recovery actions for a delayed active alert. ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### To verify - Create a rule and set the `alert after x consecutive matches` to be greater than 1. It may be helpful for testing to include recovered and active actions. - Make sure the delayed active alert recovers before hitting the consecutive matches threshold. - Verify that the rule does not send a recovery action and does not show a recovered alert in the rule run table. --- .../lib/get_alerts_for_notification.test.ts | 30 ++++ .../server/lib/get_alerts_for_notification.ts | 6 + .../utils/get_alerts_for_notification.test.ts | 7 + .../utils/get_alerts_for_notification.ts | 4 + .../tests/alerting/group4/alert_delay.ts | 2 +- .../alerts_as_data_alert_delay.ts | 141 +++++++++++++++++- 6 files changed, 185 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts index 2528a27f19f9e4..b50025b415178d 100644 --- a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts +++ b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts @@ -674,6 +674,36 @@ describe('getAlertsForNotification', () => { expect(delayedAlertsCount).toBe(2); }); + test('should remove the alert from recoveredAlerts and should not return the alert in currentRecoveredAlerts if the activeCount is less than the rule alertDelay', () => { + const alert1 = new Alert('1', { + meta: { activeCount: 1, uuid: 'uuid-1' }, + }); + const alert2 = new Alert('2', { meta: { uuid: 'uuid-2' } }); + + const { recoveredAlerts, currentRecoveredAlerts, delayedAlertsCount } = + getAlertsForNotification( + DEFAULT_FLAPPING_SETTINGS, + true, + 'default', + 5, + {}, + {}, + { + // recovered alerts + '1': alert1, + '2': alert2, + }, + { + // current recovered alerts + '1': alert1, + '2': alert2, + } + ); + expect(recoveredAlerts).toMatchInlineSnapshot(`Object {}`); + expect(currentRecoveredAlerts).toMatchInlineSnapshot(`Object {}`); + expect(delayedAlertsCount).toBe(0); + }); + test('should update active alert to look like a new alert if the activeCount is equal to the rule alertDelay', () => { const alert2 = new Alert('2', { meta: { uuid: 'uuid-2' } }); diff --git a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts index c5c7ac017b2c1e..c1974810b46d05 100644 --- a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts +++ b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts @@ -54,6 +54,12 @@ export function getAlertsForNotification< for (const id of keys(currentRecoveredAlerts)) { const alert = recoveredAlerts[id]; + // if alert has not reached the alertDelay threshold don't recover the alert + if (alert.getActiveCount() < alertDelay) { + // remove from recovered alerts + delete recoveredAlerts[id]; + delete currentRecoveredAlerts[id]; + } alert.resetActiveCount(); if (flappingSettings.enabled) { const flapping = alert.getFlapping(); diff --git a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts index a6f428d598262b..f6ce39f34d0a10 100644 --- a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts @@ -245,6 +245,13 @@ describe('getAlertsForNotification', () => { ).toMatchInlineSnapshot(`Array []`); }); + test('should not return recovered alerts if the activeCount is less than the rule alertDelay', () => { + const trackedEvents = cloneDeep([alert1]); + expect( + getAlertsForNotification(DEFAULT_FLAPPING_SETTINGS, 5, trackedEvents, [], newEventParams) + ).toMatchInlineSnapshot(`Array []`); + }); + test('should update active alert to look like a new alert if the activeCount is equal to the rule alertDelay', () => { const trackedEvents = cloneDeep([alert5]); expect( diff --git a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts index 15dcedeaf88ca6..73cbac1b2c90a5 100644 --- a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts +++ b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts @@ -56,6 +56,10 @@ export function getAlertsForNotification( } } } else if (trackedEvent.event[ALERT_STATUS] === ALERT_STATUS_RECOVERED) { + // if alert has not reached the alertDelay threshold don't recover the alert + if (trackedEvent.activeCount < alertDelay) { + continue; + } trackedEvent.activeCount = 0; if (flappingSettings.enabled) { if (trackedEvent.flapping) { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_delay.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_delay.ts index 7062c1c65fd9c5..e3f30d252495a3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_delay.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_delay.ts @@ -43,7 +43,7 @@ export default function createAlertDelayTests({ getService }: FtrProviderContext instance: [true, true, true, false, true], }; - const ruleId = await createRule(actionId, pattern, 20); + const ruleId = await createRule(actionId, pattern, 1); objectRemover.add(space.id, ruleId, 'rule', 'alerting'); let state = await getAlertState(start, ruleId); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts index 991ed513ee9848..2bb97a60bf0c26 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts @@ -80,16 +80,17 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ conflicts: 'proceed', }); }); - afterEach(() => objectRemover.removeAll()); - after(async () => { - await objectRemover.removeAll(); - await esTestIndexTool.destroy(); + afterEach(async () => { + objectRemover.removeAll(); await es.deleteByQuery({ index: [alertsAsDataIndex, alwaysFiringAlertsAsDataIndex], query: { match_all: {} }, conflicts: 'proceed', }); }); + after(async () => { + await esTestIndexTool.destroy(); + }); it('should generate expected events with a alertDelay with AAD', async () => { const { body: createdAction } = await supertestWithoutAuth @@ -620,6 +621,138 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ // alert consecutive matches should match the active count expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(4); }); + + it('should not recover alert if the activeCount did not reach the alertDelay threshold with AAD', async () => { + const { body: createdAction } = await supertestWithoutAuth + .post(`${getUrlPrefix(Spaces.space1.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire + const pattern = { + instance: [true, false, true], + }; + + const response = await supertestWithoutAuth + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.patternFiringAad', + schedule: { interval: '1d' }, + throttle: null, + notify_when: null, + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + frequency: { + summary: false, + throttle: null, + notify_when: RuleNotifyWhen.CHANGE, + }, + }, + ], + alert_delay: { + active: 3, + }, + }) + ); + + expect(response.status).to.eql(200); + const ruleId = response.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); + + // -------------------------- + // RUN 1 - 0 new alerts + // -------------------------- + let events: IValidatedEvent[] = await waitForEventLogDocs( + ruleId, + new Map([['execute', { equal: 1 }]]) + ); + let executeEvent = events[0]; + expect(get(executeEvent, ACTIVE_PATH)).to.be(0); + expect(get(executeEvent, NEW_PATH)).to.be(0); + expect(get(executeEvent, RECOVERED_PATH)).to.be(0); + expect(get(executeEvent, ACTION_PATH)).to.be(0); + expect(get(executeEvent, DELAYED_PATH)).to.be(1); + + // Query for alerts + const alertDocsRun1 = await queryForAlertDocs(); + + // Get alert state from task document + let state: any = await getTaskState(ruleId); + expect(state.alertInstances.instance.meta.activeCount).to.equal(1); + expect(state.alertInstances.instance.state.patternIndex).to.equal(0); + + // After the first run, we should have 0 alert docs for the 0 active alerts + expect(alertDocsRun1.length).to.equal(0); + + // -------------------------- + // RUN 2 - 0 new alerts + // -------------------------- + let runSoon = await supertestWithoutAuth + .post(`${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${ruleId}/_run_soon`) + .set('kbn-xsrf', 'foo'); + expect(runSoon.status).to.eql(204); + + events = await waitForEventLogDocs(ruleId, new Map([['execute', { equal: 2 }]])); + executeEvent = events[1]; + expect(get(executeEvent, ACTIVE_PATH)).to.be(0); + expect(get(executeEvent, NEW_PATH)).to.be(0); + expect(get(executeEvent, RECOVERED_PATH)).to.be(0); + expect(get(executeEvent, ACTION_PATH)).to.be(0); + expect(get(executeEvent, DELAYED_PATH)).to.be(0); + + // Query for alerts + const alertDocsRun2 = await queryForAlertDocs(); + + // Get alert state from task document + state = await getTaskState(ruleId); + expect(state.alertInstances).to.eql({}); + expect(state.alertRecoveredInstances).to.eql({}); + expect(state.alertTypeState.patternIndex).to.equal(2); + + // After the second run, we should have 0 alert docs for the 0 recovered alerts + expect(alertDocsRun2.length).to.equal(0); + + // -------------------------- + // RUN 3 - 0 new alerts + // -------------------------- + runSoon = await supertestWithoutAuth + .post(`${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${ruleId}/_run_soon`) + .set('kbn-xsrf', 'foo'); + expect(runSoon.status).to.eql(204); + + events = await waitForEventLogDocs(ruleId, new Map([['execute', { equal: 3 }]])); + executeEvent = events[2]; + expect(get(executeEvent, ACTIVE_PATH)).to.be(0); + expect(get(executeEvent, NEW_PATH)).to.be(0); + expect(get(executeEvent, RECOVERED_PATH)).to.be(0); + expect(get(executeEvent, ACTION_PATH)).to.be(0); + expect(get(executeEvent, DELAYED_PATH)).to.be(1); + + // Query for alerts + const alertDocsRun3 = await queryForAlertDocs(); + + // Get alert state from task document + state = await getTaskState(ruleId); + expect(state.alertInstances.instance.meta.activeCount).to.equal(1); + expect(state.alertInstances.instance.state.patternIndex).to.equal(2); + + // After the third run, we should have 0 alert docs for the 0 active alerts + expect(alertDocsRun3.length).to.equal(0); + }); }); function testExpectRuleData( From 6ecccf3def7be190d8203b978644e2cfe352d085 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Mon, 20 May 2024 11:39:23 -0400 Subject: [PATCH 25/97] [Security Solution][Endpoint] Improve Axios error output for dev scripts + change default for creation of Kbn/ES clients to NOT include self-signed certs (#183531) ## Summary Refactors included in this PR include: - Adds `.catch()` to calls made with Axios and wraps errors with more information about the failed request - Adds retry of API calls to external URLs (ex. artifacts) - Refactors the `noCertForSsl` options of kibana scripting services to: - Renames it to `useCertForSsl` - Defaults the value to `false`: by default the factory functions will NOT inject the serf-signed cert into the clients - Background: the initial work to make our tests work with Serverless added this cert automatically if the URL started with `https`. That intern cause all of our CLI scripts to not be usable against cloud instances (for testing). This change reverts that but still enables one to include it by setting the (renamed) option `useCertForSsl` when creating a ES or KBN client. --- .../data_loaders/setup_fleet_for_endpoint.ts | 6 +- .../common/endpoint/format_axios_error.ts | 9 ++- .../endpoint/agent_policy_generator/index.ts | 1 - .../scripts/endpoint/api_emulator/index.ts | 1 - .../fleet_server/fleet_server_services.ts | 44 ++++++++----- .../scripts/endpoint/common/fleet_services.ts | 65 ++++++++++--------- .../scripts/endpoint/common/stack_services.ts | 24 +++---- .../scripts/endpoint/env_data_loader/index.ts | 1 - .../endpoint/sentinelone_host/common.ts | 20 ++++-- .../endpoint/sentinelone_host/index.ts | 1 - 10 files changed, 94 insertions(+), 78 deletions(-) diff --git a/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts b/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts index 12505dc87a2b02..e9da1b9a4df8cb 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts @@ -29,10 +29,6 @@ import { wrapErrorAndRejectPromise, } from './utils'; -export interface SetupFleetForEndpointResponse { - endpointPackage: BulkInstallPackageInfo; -} - /** * Calls the fleet setup APIs and then installs the latest Endpoint package * @param kbnClient @@ -43,7 +39,7 @@ export const setupFleetForEndpoint = usageTracker.track( async (kbnClient: KbnClient, logger?: ToolingLog): Promise => { const log = logger ?? createToolingLogger(); - log.info(`setupFleetForEndpoint(): Setting up fleet for endpoint`); + log.debug(`setupFleetForEndpoint(): Setting up fleet for endpoint`); // Setup Fleet try { diff --git a/x-pack/plugins/security_solution/common/endpoint/format_axios_error.ts b/x-pack/plugins/security_solution/common/endpoint/format_axios_error.ts index 1f0c7da3bbad6e..fa46f7940c17eb 100644 --- a/x-pack/plugins/security_solution/common/endpoint/format_axios_error.ts +++ b/x-pack/plugins/security_solution/common/endpoint/format_axios_error.ts @@ -22,15 +22,18 @@ export class FormattedAxiosError extends Error { }; constructor(axiosError: AxiosError) { + const method = axiosError.config?.method ?? ''; + const url = axiosError.config?.url ?? ''; + super( `${axiosError.message}${ axiosError?.response?.data ? `: ${JSON.stringify(axiosError?.response?.data)}` : '' - }` + }${url ? `\n(Request: ${method} ${url})` : ''}` ); this.request = { - method: axiosError.config?.method ?? '?', - url: axiosError.config?.url ?? '?', + method, + url, data: axiosError.config?.data ?? '', }; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/agent_policy_generator/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/agent_policy_generator/index.ts index 104bf337be5d37..afe370e1bda72e 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/agent_policy_generator/index.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/agent_policy_generator/index.ts @@ -59,7 +59,6 @@ const agentPolicyGenerator: RunFn = async ({ flags, log }) => { username: flags.username as string, password: flags.password as string, apiKey: flags.apikey as string, - noCertForSsl: true, log, }); diff --git a/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/index.ts index 15a48654f29632..8c4d0eae4e5e7b 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/index.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/index.ts @@ -79,7 +79,6 @@ const cliRunner: RunFn = async (cliContext) => { elasticsearchUrl, asSuperuser, log, - noCertForSsl: true, }); const coreServices: ExternalEdrServerEmulatorCoreServices = { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts index 73cf96b5b68644..1eefe220c0d399 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts @@ -683,24 +683,32 @@ export const isFleetServerRunning = async ( const url = new URL(fleetServerUrl); url.pathname = '/api/status'; - return axios - .request({ - method: 'GET', - url: url.toString(), - responseType: 'json', - // Custom agent to ensure we don't get cert errors - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) - .then((response) => { - log.debug(`Fleet server is up and running at [${fleetServerUrl}]. Status: `, response.data); - return true; - }) - .catch(catchAxiosErrorFormatAndThrow) - .catch((e) => { - log.debug(`Fleet server not up at [${fleetServerUrl}]`); - log.verbose(`Call to [${url.toString()}] failed with:`, e); - return false; - }); + return pRetry( + async () => { + return axios + .request({ + method: 'GET', + url: url.toString(), + responseType: 'json', + // Custom agent to ensure we don't get cert errors + httpsAgent: new https.Agent({ rejectUnauthorized: false }), + }) + .then((response) => { + log.debug( + `Fleet server is up and running at [${fleetServerUrl}]. Status: `, + response.data + ); + return true; + }) + .catch(catchAxiosErrorFormatAndThrow) + .catch((e) => { + log.debug(`Fleet server not up at [${fleetServerUrl}]`); + log.verbose(`Call to [${url.toString()}] failed with:`, e); + return false; + }); + }, + { maxTimeout: 10000 } + ); }; /** diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts index 8d1d2f5e61f493..317cae2882e57f 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts @@ -58,10 +58,10 @@ import type { PostAgentUnenrollResponse, CopyAgentPolicyRequest, } from '@kbn/fleet-plugin/common/types'; -import nodeFetch from 'node-fetch'; import semver from 'semver'; import axios from 'axios'; import { userInfo } from 'os'; +import pRetry from 'p-retry'; import { isFleetServerRunning } from './fleet_server/fleet_server_services'; import { getEndpointPackageInfo } from '../../../common/endpoint/utils/package'; import type { DownloadAndStoreAgentResponse } from './agent_downloads_service'; @@ -79,6 +79,7 @@ import { FleetAgentGenerator } from '../../../common/endpoint/data_generators/fl const fleetGenerator = new FleetAgentGenerator(); const CURRENT_USERNAME = userInfo().username.toLowerCase(); const DEFAULT_AGENT_POLICY_NAME = `${CURRENT_USERNAME} test policy`; + /** A Fleet agent policy that includes integrations that don't actually require an agent to run on a host. Example: SenttinelOne */ export const DEFAULT_AGENTLESS_INTEGRATIONS_AGENT_POLICY_NAME = `${CURRENT_USERNAME} - agentless integrations`; @@ -411,14 +412,20 @@ export const getAgentVersionMatchingCurrentStack = async ( ); } - const agentVersions = await axios - .get('https://artifacts-api.elastic.co/v1/versions') - .then((response) => - map( - response.data.versions.filter(isValidArtifactVersion), - (version) => version.split('-SNAPSHOT')[0] - ) - ); + const agentVersions = await pRetry( + async () => { + return axios + .get('https://artifacts-api.elastic.co/v1/versions') + .catch(catchAxiosErrorFormatAndThrow) + .then((response) => + map( + response.data.versions.filter(isValidArtifactVersion), + (version) => version.split('-SNAPSHOT')[0] + ) + ); + }, + { maxTimeout: 10000 } + ); let version = semver.maxSatisfying(agentVersions, `<=${kbnStatus.version.number}`) ?? @@ -492,16 +499,16 @@ export const getAgentDownloadUrl = async ( log?.verbose(`Retrieving elastic agent download URL from:\n ${artifactSearchUrl}`); - const searchResult: ElasticArtifactSearchResponse = await nodeFetch(artifactSearchUrl).then( - (response) => { - if (!response.ok) { - throw new Error( - `Failed to search elastic's artifact repository: ${response.statusText} (HTTP ${response.status}) {URL: ${artifactSearchUrl})` - ); - } - - return response.json(); - } + const searchResult: ElasticArtifactSearchResponse = await pRetry( + async () => { + return axios + .get(artifactSearchUrl) + .catch(catchAxiosErrorFormatAndThrow) + .then((response) => { + return response.data; + }); + }, + { maxTimeout: 10000 } ); log?.verbose(searchResult); @@ -547,16 +554,16 @@ export const getLatestAgentDownloadVersion = async ( ): Promise => { const artifactsUrl = 'https://artifacts-api.elastic.co/v1/versions'; const semverMatch = `<=${version.replace(`-SNAPSHOT`, '')}`; - const artifactVersionsResponse: { versions: string[] } = await nodeFetch(artifactsUrl).then( - (response) => { - if (!response.ok) { - throw new Error( - `Failed to retrieve list of versions from elastic's artifact repository: ${response.statusText} (HTTP ${response.status}) {URL: ${artifactsUrl})` - ); - } - - return response.json(); - } + const artifactVersionsResponse: { versions: string[] } = await pRetry( + async () => { + return axios + .get<{ versions: string[] }>(artifactsUrl) + .catch(catchAxiosErrorFormatAndThrow) + .then((response) => { + return response.data; + }); + }, + { maxTimeout: 10000 } ); const stackVersionToArtifactVersion: Record = artifactVersionsResponse.versions diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts index a7dc1b7ecfe395..5d321ec09cc48d 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts @@ -70,7 +70,7 @@ interface CreateRuntimeServicesOptions { log?: ToolingLog; asSuperuser?: boolean; /** If true, then a certificate will not be used when creating the Kbn/Es clients when url is `https` */ - noCertForSsl?: boolean; + useCertForSsl?: boolean; } class KbnClientExtended extends KbnClient { @@ -112,7 +112,7 @@ export const createRuntimeServices = async ({ esPassword: _esPassword, log = createToolingLogger(), asSuperuser = false, - noCertForSsl, + useCertForSsl = false, }: CreateRuntimeServicesOptions): Promise => { let username = _username; let password = _password; @@ -124,7 +124,7 @@ export const createRuntimeServices = async ({ url: kibanaUrl, username, password, - noCertForSsl, + useCertForSsl, log, }); @@ -149,7 +149,7 @@ export const createRuntimeServices = async ({ username: esUsername ?? username, password: esPassword ?? password, log, - noCertForSsl, + useCertForSsl, }) ); @@ -166,14 +166,14 @@ export const createRuntimeServices = async ({ const fleetURL = new URL(fleetServerUrl); return { - kbnClient: createKbnClient({ log, url: kibanaUrl, username, password, apiKey, noCertForSsl }), + kbnClient: createKbnClient({ log, url: kibanaUrl, username, password, apiKey, useCertForSsl }), esClient: createEsClient({ log, url: elasticsearchUrl, username: esUsername ?? username, password: esPassword ?? password, apiKey, - noCertForSsl, + useCertForSsl, }), log, localhostRealIp: getLocalhostRealIp(), @@ -222,7 +222,7 @@ export const createEsClient = ({ password, apiKey, log, - noCertForSsl, + useCertForSsl = false, }: { url: string; username: string; @@ -230,14 +230,14 @@ export const createEsClient = ({ /** If defined, both `username` and `password` will be ignored */ apiKey?: string; log?: ToolingLog; - noCertForSsl?: boolean; + useCertForSsl?: boolean; }): Client => { const isHttps = new URL(url).protocol.startsWith('https'); const clientOptions: ClientOptions = { node: buildUrlWithCredentials(url, apiKey ? '' : username, apiKey ? '' : password), }; - if (isHttps && !noCertForSsl) { + if (isHttps && useCertForSsl) { clientOptions.tls = { ca: [CA_CERTIFICATE], }; @@ -265,7 +265,7 @@ export const createKbnClient = ({ password, apiKey, log = createToolingLogger(), - noCertForSsl, + useCertForSsl = false, }: { url: string; username: string; @@ -273,7 +273,7 @@ export const createKbnClient = ({ /** If defined, both `username` and `password` will be ignored */ apiKey?: string; log?: ToolingLog; - noCertForSsl?: boolean; + useCertForSsl?: boolean; }): KbnClient => { const isHttps = new URL(url).protocol.startsWith('https'); const clientOptions: ConstructorParameters[0] = { @@ -282,7 +282,7 @@ export const createKbnClient = ({ url: buildUrlWithCredentials(url, username, password), }; - if (isHttps && !noCertForSsl) { + if (isHttps && useCertForSsl) { clientOptions.certificateAuthorities = [CA_CERTIFICATE]; } diff --git a/x-pack/plugins/security_solution/scripts/endpoint/env_data_loader/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/env_data_loader/index.ts index 4de4929b8c4c2b..031541e8f54031 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/env_data_loader/index.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/env_data_loader/index.ts @@ -22,7 +22,6 @@ export const cli = () => { url: cliContext.flags.kibana as string, username: cliContext.flags.username as string, password: cliContext.flags.password as string, - noCertForSsl: true, }); const options = { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/common.ts b/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/common.ts index 3bce0126fbf290..d508f9bc605bfa 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/common.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/common.ts @@ -10,6 +10,7 @@ import type { AxiosRequestConfig } from 'axios'; import axios from 'axios'; import type { KbnClient } from '@kbn/test'; import { SENTINELONE_CONNECTOR_ID } from '@kbn/stack-connectors-plugin/common/sentinelone/constants'; +import pRetry from 'p-retry'; import { dump } from '../common/utils'; import { type RuleResponse } from '../../../common/api/detection_engine'; import { createToolingLogger } from '../../../common/endpoint/data_loaders/utils'; @@ -86,13 +87,18 @@ export class S1Client { this.log.debug(`Request: `, requestOptions); - return axios - .request(requestOptions) - .then((response) => { - this.log.verbose(`Response: `, response); - return response.data; - }) - .catch(catchAxiosErrorFormatAndThrow); + return pRetry( + async () => { + return axios + .request(requestOptions) + .then((response) => { + this.log.verbose(`Response: `, response); + return response.data; + }) + .catch(catchAxiosErrorFormatAndThrow); + }, + { maxTimeout: 10000 } + ); } public buildUrl(path: string): string { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts index 2c179f6e853ab2..d2f41908214130 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts @@ -111,7 +111,6 @@ const runCli: RunFn = async ({ log, flags }) => { url: kibanaUrl, username, password, - noCertForSsl: true, }); const runningS1VMs = ( From 79a967e2c3cdd6a5cc6a411753b4827daf088cbc Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 16:46:01 +0100 Subject: [PATCH 26/97] skip failing es serverless promotion suites(#169787) --- x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts index 6638567a926256..40ae3e308a3b63 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts @@ -76,7 +76,8 @@ describe('ALL - Saved queries', { tags: ['@ess', '@serverless'] }, () => { }); }); - describe('prebuilt', () => { + // FAILING ES SERVERLESS PROMOTION: https://github.com/elastic/kibana/issues/169787 + describe.skip('prebuilt', () => { let packName: string; let packId: string; let savedQueryId: string; From c6e1000aaebbb529b0e5e29e56e6a52961dd81be Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 16:55:41 +0100 Subject: [PATCH 27/97] fix(NA): eslint errors --- x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts index 40ae3e308a3b63..27fe443eed062f 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/saved_queries.cy.ts @@ -76,7 +76,7 @@ describe('ALL - Saved queries', { tags: ['@ess', '@serverless'] }, () => { }); }); - // FAILING ES SERVERLESS PROMOTION: https://github.com/elastic/kibana/issues/169787 + // FAILING ES SERVERLESS PROMOTION: https://github.com/elastic/kibana/issues/169787 describe.skip('prebuilt', () => { let packName: string; let packId: string; From 25c7571fc3f682a05258f856345a292c3484b943 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 17:30:07 +0100 Subject: [PATCH 28/97] skip flaky suite (#183771) --- .../observability/dataset_quality/dataset_quality_flyout.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts index 9688c177c2e734..2f2c40932ceaf1 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts @@ -31,7 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const to = '2024-01-01T12:00:00.000Z'; const excludeKeysFromServerless = ['size']; // https://github.com/elastic/kibana/issues/178954 - describe('Dataset quality flyout', function () { + // FLAKY: https://github.com/elastic/kibana/issues/183771 + describe.skip('Dataset quality flyout', function () { this.tags(['failsOnMKI']); // Failing https://github.com/elastic/kibana/issues/183495 before(async () => { From 27250993b2ee8117a6ae4c102556a3dbb23e3c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Zaffarano?= Date: Mon, 20 May 2024 13:37:28 -0300 Subject: [PATCH 29/97] [Security Solution][Telemetry] Optimize endpoint-metrics query (#183763) ## Summary Updates `receiver::fetchEndpointMetricsAbstract` query by disabling the `_source` instead of excluding everything. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../security_solution/server/lib/telemetry/receiver.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts index 5b59282a320ea8..f4cf62a4381b68 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts @@ -417,9 +417,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { latest_metrics: { top_hits: { size: 1, - _source: { - excludes: ['*'], - }, + _source: false, sort: [ { '@timestamp': { @@ -521,6 +519,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { const buckets = endpointMetadataResponse?.aggregations?.endpoint_metadata?.buckets ?? []; return buckets.reduce((cache, endpointAgentId) => { + // const id = endpointAgentId.latest_metadata.hits.hits[0]._id; const doc = endpointAgentId.latest_metadata.hits.hits[0]._source; cache.set(endpointAgentId.key, doc); return cache; From 1830300c30e3aa13841d65666a18d6173a4dea9d Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Mon, 20 May 2024 18:17:20 +0100 Subject: [PATCH 30/97] [Entity Analytics] Move risk scoring painless to static files... again (with sorting fix after test failure) (#183844) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This code was originally approved and merged in https://github.com/elastic/kibana/pull/182038 It was then reverted in https://github.com/elastic/kibana/pull/183759 after a [test failure](https://github.com/elastic/kibana/issues/183758). The previous code had introduced flakiness, occasionally the inputs would be supplied to risk scoring in the wrong order causing the score to decrease. Re-adding the sorting in the reduce script has fixed this. Here is the only new code: https://github.com/elastic/kibana/commit/a8cbb1c47ab9114ebec082dfe9450e3984f1df59 [Flaky test run](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6045) 🟢 --------- Co-authored-by: oatkiller Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../api/entity_analytics/common/common.gen.ts | 32 +---- .../common/common.schema.yaml | 55 +------- .../common/risk_weights.schema.test.ts | 81 +----------- .../risk_score/calculate_risk_scores.ts | 106 +++------------ .../entity_analytics/risk_score/constants.ts | 5 - .../risk_score/painless/index.test.ts | 24 ++++ .../risk_score/painless/index.ts | 40 ++++++ .../painless/risk_scoring_combine.painless | 1 + .../painless/risk_scoring_init.painless | 1 + .../painless/risk_scoring_map.painless | 8 ++ .../painless/risk_scoring_reduce.painless | 41 ++++++ .../risk_score/risk_weights.test.ts | 123 ------------------ .../risk_score/risk_weights.ts | 103 --------------- .../risk_score/routes/preview.test.ts | 15 +-- .../risk_score_preview.ts | 50 ------- 15 files changed, 143 insertions(+), 542 deletions(-) create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.test.ts create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.ts create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_combine.painless create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_init.painless create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_map.painless create mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_reduce.painless delete mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.test.ts delete mode 100644 x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts index b0375342480420..f17cb2a5ee0fb7 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts @@ -155,8 +155,8 @@ export const RiskScoreWeightGlobalShared = z.object({ type: z.literal('global_identifier'), }); -export type RiskScoreWeightGlobal = z.infer; -export const RiskScoreWeightGlobal = z.union([ +export type RiskScoreWeight = z.infer; +export const RiskScoreWeight = z.union([ RiskScoreWeightGlobalShared.merge( z.object({ host: RiskScoreEntityIdentifierWeights, @@ -171,34 +171,6 @@ export const RiskScoreWeightGlobal = z.union([ ), ]); -export type RiskScoreWeightCategoryShared = z.infer; -export const RiskScoreWeightCategoryShared = z.object({ - type: z.literal('risk_category'), - value: RiskScoreCategories, -}); - -export type RiskScoreWeightCategory = z.infer; -export const RiskScoreWeightCategory = z.union([ - RiskScoreWeightCategoryShared.merge( - z.object({ - host: RiskScoreEntityIdentifierWeights, - user: RiskScoreEntityIdentifierWeights.optional(), - }) - ), - RiskScoreWeightCategoryShared.merge( - z.object({ - host: RiskScoreEntityIdentifierWeights.optional(), - user: RiskScoreEntityIdentifierWeights, - }) - ), -]); - -/** - * Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1'). - */ -export type RiskScoreWeight = z.infer; -export const RiskScoreWeight = z.union([RiskScoreWeightGlobal, RiskScoreWeightCategory]); - /** * A list of weights to be applied to the scoring calculation. */ diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml index 7b6634876d8a62..63aa739d2133d0 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml @@ -201,7 +201,7 @@ components: enum: - global_identifier - RiskScoreWeightGlobal: + RiskScoreWeight: oneOf: - allOf: - $ref: '#/components/schemas/RiskScoreWeightGlobalShared' @@ -225,65 +225,12 @@ components: user: $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' - RiskScoreWeightCategoryShared: - x-inline: true - type: object - required: - - type - - value - properties: - type: - type: string - enum: - - risk_category - value: - $ref: '#/components/schemas/RiskScoreCategories' - - RiskScoreWeightCategory: - oneOf: - - allOf: - - $ref: '#/components/schemas/RiskScoreWeightCategoryShared' - - type: object - required: - - host - properties: - host: - $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' - user: - $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' - - - allOf: - - $ref: '#/components/schemas/RiskScoreWeightCategoryShared' - - type: object - required: - - user - properties: - host: - $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' - user: - $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' - - RiskScoreWeight: - description: "Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1')." - oneOf: - - $ref: '#/components/schemas/RiskScoreWeightGlobal' - - $ref: '#/components/schemas/RiskScoreWeightCategory' - example: - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - RiskScoreWeights: description: 'A list of weights to be applied to the scoring calculation.' type: array items: $ref: '#/components/schemas/RiskScoreWeight' example: - - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - type: 'global_identifier' host: 0.5 user: 0.1 diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts index 59b0859300f88a..e4afc38badd246 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts @@ -59,9 +59,7 @@ describe('risk weight schema', () => { const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; expect(decoded.success).toBeFalsy(); - expect(stringifyZodError(decoded.error)).toEqual( - 'host: Required, user: Required, type: Invalid literal value, expected "risk_category", value: Invalid literal value, expected "category_1", host: Required, and 3 more' - ); + expect(stringifyZodError(decoded.error)).toContain('host: Required, user: Required'); }); it('allows a single host weight', () => { @@ -123,44 +121,10 @@ describe('risk weight schema', () => { expect(decoded.success).toBeFalsy(); expect(stringifyZodError(decoded.error)).toEqual( - 'type: Invalid literal value, expected "global_identifier", host: Required, type: Invalid literal value, expected "global_identifier", value: Invalid literal value, expected "category_1", host: Required, and 1 more' + 'type: Invalid literal value, expected "global_identifier", host: Required, type: Invalid literal value, expected "global_identifier"' ); }); - it('rejects if neither host nor user weight are specified', () => { - const payload = { type, value: RiskCategories.category_1 }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; - - expect(decoded.success).toBeFalsy(); - expect(stringifyZodError(decoded.error)).toEqual( - 'type: Invalid literal value, expected "global_identifier", host: Required, type: Invalid literal value, expected "global_identifier", user: Required, host: Required, and 1 more' - ); - }); - - it('allows a single host weight', () => { - const payload = { type, value: RiskCategories.category_1, host: 0.1 }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; - - expect(decoded.success).toBeTruthy(); - expect(decoded.data).toEqual(payload); - }); - - it('allows a single user weight', () => { - const payload = { type, value: RiskCategories.category_1, user: 0.1 }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; - - expect(decoded.success).toBeTruthy(); - expect(decoded.data).toEqual(payload); - }); - - it('allows both a host and user weight', () => { - const payload = { type, value: RiskCategories.category_1, user: 0.1, host: 0.5 }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; - - expect(decoded.success).toBeTruthy(); - expect(decoded.data).toEqual(payload); - }); - it('rejects a weight outside of 0-1', () => { const payload = { type, value: RiskCategories.category_1, host: -5 }; const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; @@ -170,47 +134,6 @@ describe('risk weight schema', () => { `host: Number must be greater than or equal to 0` ); }); - - it('removes extra keys if specified', () => { - const payload = { - type, - value: RiskCategories.category_1, - host: 0.1, - extra: 'even more', - }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; - - expect(decoded.success).toBeTruthy(); - expect(decoded.data).toEqual({ type, value: RiskCategories.category_1, host: 0.1 }); - }); - - describe('allowed category values', () => { - it('allows the alerts type for a category', () => { - const payload = { - type, - value: RiskCategories.category_1, - host: 0.1, - }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; - - expect(decoded.success).toBeTruthy(); - expect(decoded.data).toEqual(payload); - }); - - it('rejects an unknown category value', () => { - const payload = { - type, - value: 'unknown', - host: 0.1, - }; - const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; - - expect(decoded.success).toBeFalsy(); - expect(stringifyZodError(decoded.error)).toContain( - 'type: Invalid literal value, expected "global_identifier", type: Invalid literal value, expected "global_identifier", user: Required, value: Invalid literal value, expected "category_1", value: Invalid literal value, expected "category_1", and 1 more' - ); - }); - }); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts index 3c930ec07e666e..9f99a9ae4a5619 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts @@ -13,10 +13,7 @@ import type { import type { ElasticsearchClient, Logger } from '@kbn/core/server'; import { ALERT_RISK_SCORE, - ALERT_RULE_NAME, - ALERT_UUID, ALERT_WORKFLOW_STATUS, - EVENT_KIND, } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; import type { RiskScoresPreviewResponse } from '../../../../common/api/entity_analytics/risk_engine/preview_route.gen'; import type { @@ -28,6 +25,7 @@ import { type IdentifierType, getRiskLevel, RiskCategories, + RiskWeightTypes, } from '../../../../common/entity_analytics/risk_engine'; import { withSecuritySpan } from '../../../utils/with_security_span'; import type { AssetCriticalityRecord } from '../../../../common/api/entity_analytics'; @@ -38,24 +36,13 @@ import { normalize, } from '../asset_criticality/helpers'; import { getAfterKeyForIdentifierType, getFieldForIdentifier } from './helpers'; -import { - buildCategoryCountDeclarations, - buildCategoryAssignment, - buildCategoryScoreDeclarations, - buildWeightingOfScoreByCategory, - getGlobalWeightForIdentifierType, -} from './risk_weights'; import type { CalculateRiskScoreAggregations, CalculateScoresParams, RiskScoreBucket, } from '../types'; -import { - MAX_INPUTS_COUNT, - RISK_SCORING_INPUTS_COUNT_MAX, - RISK_SCORING_SUM_MAX, - RISK_SCORING_SUM_VALUE, -} from './constants'; +import { RISK_SCORING_SUM_MAX, RISK_SCORING_SUM_VALUE } from './constants'; +import { getPainlessScripts, type PainlessScripts } from './painless'; const formatForResponse = ({ bucket, @@ -118,67 +105,22 @@ const filterFromRange = (range: CalculateScoresParams['range']): QueryDslQueryCo range: { '@timestamp': { lt: range.end, gte: range.start } }, }); -const buildReduceScript = ({ - globalIdentifierTypeWeight, -}: { - globalIdentifierTypeWeight?: number; -}): string => { - return ` - Map results = new HashMap(); - List inputs = []; - for (state in states) { - inputs.addAll(state.inputs) - } - Collections.sort(inputs, (a, b) -> b.get('weighted_score').compareTo(a.get('weighted_score'))); - - double num_inputs_to_score = Math.min(inputs.length, params.max_risk_inputs_per_identity); - results['notes'] = []; - if (num_inputs_to_score == params.max_risk_inputs_per_identity) { - results['notes'].add('Number of risk inputs (' + inputs.length + ') exceeded the maximum allowed (' + params.max_risk_inputs_per_identity + ').'); - } - - ${buildCategoryScoreDeclarations()} - ${buildCategoryCountDeclarations()} - - double total_score = 0; - double current_score = 0; - List risk_inputs = []; - for (int i = 0; i < num_inputs_to_score; i++) { - current_score = inputs[i].weighted_score / Math.pow(i + 1, params.p); - - if (i < ${MAX_INPUTS_COUNT}) { - inputs[i]["contribution"] = 100 * current_score / params.risk_cap; - risk_inputs.add(inputs[i]); - } - - ${buildCategoryAssignment()} - total_score += current_score; - } - - ${globalIdentifierTypeWeight != null ? `total_score *= ${globalIdentifierTypeWeight};` : ''} - double score_norm = 100 * total_score / params.risk_cap; - results['score'] = total_score; - results['normalized_score'] = score_norm; - results['risk_inputs'] = risk_inputs; - - return results; - `; -}; - const buildIdentifierTypeAggregation = ({ afterKeys, identifierType, pageSize, weights, alertSampleSizePerShard, + scriptedMetricPainless, }: { afterKeys: AfterKeys; identifierType: IdentifierType; pageSize: number; weights?: RiskScoreWeights; alertSampleSizePerShard: number; + scriptedMetricPainless: PainlessScripts; }): AggregationsAggregationContainer => { - const globalIdentifierTypeWeight = getGlobalWeightForIdentifierType({ identifierType, weights }); + const globalIdentifierTypeWeight = getGlobalWeightForIdentifierType(identifierType, weights); const identifierField = getFieldForIdentifier(identifierType); return { @@ -204,33 +146,15 @@ const buildIdentifierTypeAggregation = ({ aggs: { risk_details: { scripted_metric: { - init_script: 'state.inputs = []', - map_script: ` - Map fields = new HashMap(); - String category = doc['${EVENT_KIND}'].value; - double score = doc['${ALERT_RISK_SCORE}'].value; - double weighted_score = 0.0; - - fields.put('time', doc['@timestamp'].value); - fields.put('rule_name', doc['${ALERT_RULE_NAME}'].value); - - fields.put('category', category); - fields.put('index', doc['_index'].value); - fields.put('id', doc['${ALERT_UUID}'].value); - fields.put('score', score); - - ${buildWeightingOfScoreByCategory({ userWeights: weights, identifierType })} - fields.put('weighted_score', weighted_score); - - state.inputs.add(fields); - `, - combine_script: 'return state;', + init_script: scriptedMetricPainless.init, + map_script: scriptedMetricPainless.map, + combine_script: scriptedMetricPainless.combine, params: { - max_risk_inputs_per_identity: RISK_SCORING_INPUTS_COUNT_MAX, p: RISK_SCORING_SUM_VALUE, risk_cap: RISK_SCORING_SUM_MAX, + global_identifier_type_weight: globalIdentifierTypeWeight || 1, }, - reduce_script: buildReduceScript({ globalIdentifierTypeWeight }), + reduce_script: scriptedMetricPainless.reduce, }, }, }, @@ -286,6 +210,12 @@ const processScores = async ({ }); }; +export const getGlobalWeightForIdentifierType = ( + identifierType: IdentifierType, + weights?: RiskScoreWeights +): number | undefined => + weights?.find((weight) => weight.type === RiskWeightTypes.global)?.[identifierType]; + export const calculateRiskScores = async ({ afterKeys: userAfterKeys, assetCriticalityService, @@ -307,6 +237,7 @@ export const calculateRiskScores = async ({ } & CalculateScoresParams): Promise => withSecuritySpan('calculateRiskScores', async () => { const now = new Date().toISOString(); + const scriptedMetricPainless = await getPainlessScripts(); const filter = [ filterFromRange(range), { bool: { must_not: { term: { [ALERT_WORKFLOW_STATUS]: 'closed' } } } }, @@ -345,6 +276,7 @@ export const calculateRiskScores = async ({ pageSize, weights, alertSampleSizePerShard, + scriptedMetricPainless, }); return aggs; }, {} as Record), diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/constants.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/constants.ts index 73f93d71b11f9d..6a691eac427346 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/constants.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/constants.ts @@ -16,11 +16,6 @@ export const RISK_SCORING_SUM_VALUE = 1.5; */ export const RISK_SCORING_SUM_MAX = 261.2; -/** - * The risk scoring algorithm can only process a finite number of risk inputs per identity; this value represents the maximum number of inputs that will be processed. - */ -export const RISK_SCORING_INPUTS_COUNT_MAX = 999999; - /** * This value represents the maximum possible risk score after normalization. */ diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.test.ts new file mode 100644 index 00000000000000..e21a6afeff326c --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.test.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 { getPainlessScripts } from '.'; + +describe('getPainlessScripts', () => { + // to update snapshot run `yarn test:jest x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.test.ts -u` + test('Scripts should not have changed. If this change is intentional, ensure that Serverless scripted metric allowlists are updated', async () => { + const scripts = await getPainlessScripts(); + + expect(scripts).toMatchInlineSnapshot(` + Object { + "combine": "return state;", + "init": "state.inputs = []", + "map": "Map fields = new HashMap();fields.put('id', doc['kibana.alert.uuid'].value);fields.put('index', doc['_index'].value);fields.put('time', doc['@timestamp'].value);fields.put('rule_name', doc['kibana.alert.rule.name'].value);fields.put('category', doc['event.kind'].value);fields.put('score', doc['kibana.alert.risk_score'].value);state.inputs.add(fields); ", + "reduce": "Map results = new HashMap();results['notes'] = [];results['category_1_score'] = 0.0;results['category_1_count'] = 0;results['risk_inputs'] = [];results['score'] = 0.0;def inputs = states[0].inputs;Collections.sort(inputs, (a, b) -> b.get('score').compareTo(a.get('score')));for (int i = 0; i < inputs.length; i++) { double current_score = inputs[i].score / Math.pow(i + 1, params.p); if (i < 10) { inputs[i][\\"contribution\\"] = 100 * current_score / params.risk_cap; results['risk_inputs'].add(inputs[i]); } results['category_1_score'] += current_score; results['category_1_count'] += 1; results['score'] += current_score;}results['score'] *= params.global_identifier_type_weight;results['normalized_score'] = 100 * results['score'] / params.risk_cap;return results;", + } + `); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.ts new file mode 100644 index 00000000000000..896340262b21c7 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/index.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import fs from 'fs'; +import { flow } from 'lodash'; + +const PHASES = ['init', 'map', 'combine', 'reduce'] as const; + +type Phase = typeof PHASES[number]; +export type PainlessScripts = Record; + +const removeNewlines = (content: string) => content.replace(/\n/g, ''); +const condenseMultipleSpaces = (content: string) => content.replace(/\s+/g, ' '); +const removeComments = (content: string) => content.replace(/\/\/.*/g, ''); +const minifyContent = flow(removeComments, removeNewlines, condenseMultipleSpaces); + +const readScript = async (phase: Phase) => { + const content = await fs.promises.readFile(`${__dirname}/risk_scoring_${phase}.painless`, 'utf8'); + return minifyContent(content); +}; + +let cache: PainlessScripts | undefined; + +export const getPainlessScripts = async (): Promise => { + if (cache) { + return cache; + } + + const [init, map, combine, reduce] = await Promise.all(PHASES.map(readScript)); + + // The cache will only ever have one value, so we can safely update it + // un-atomicly without worrying about lost updates. + // eslint-disable-next-line require-atomic-updates + cache = { init, map, combine, reduce }; + return cache; +}; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_combine.painless b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_combine.painless new file mode 100644 index 00000000000000..da2a75d569f189 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_combine.painless @@ -0,0 +1 @@ +return state; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_init.painless b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_init.painless new file mode 100644 index 00000000000000..5ee9376d701ad3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_init.painless @@ -0,0 +1 @@ +state.inputs = [] diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_map.painless b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_map.painless new file mode 100644 index 00000000000000..3d79df51be0e82 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_map.painless @@ -0,0 +1,8 @@ +Map fields = new HashMap(); +fields.put('id', doc['kibana.alert.uuid'].value); +fields.put('index', doc['_index'].value); +fields.put('time', doc['@timestamp'].value); +fields.put('rule_name', doc['kibana.alert.rule.name'].value); +fields.put('category', doc['event.kind'].value); +fields.put('score', doc['kibana.alert.risk_score'].value); +state.inputs.add(fields); \ No newline at end of file diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_reduce.painless b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_reduce.painless new file mode 100644 index 00000000000000..629a9255225909 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/painless/risk_scoring_reduce.painless @@ -0,0 +1,41 @@ +Map results = new HashMap(); +results['notes'] = []; +results['category_1_score'] = 0.0; +results['category_1_count'] = 0; +results['risk_inputs'] = []; +results['score'] = 0.0; + +def inputs = states[0].inputs; + +// Currently the alerts index only has one shard so there will only be one state +// If there are multiple shards we will need these lines +// List inputs = []; +// for (state in states) { +// inputs.addAll(state.inputs) +// } + +// sorting is needed even though we sort in the parent query because the scripted metric +// agg does not guarantee order. +Collections.sort(inputs, (a, b) -> b.get('score').compareTo(a.get('score'))); + +for (int i = 0; i < inputs.length; i++) { + double current_score = inputs[i].score / Math.pow(i + 1, params.p); + + if (i < 10) { + inputs[i]["contribution"] = 100 * current_score / params.risk_cap; + results['risk_inputs'].add(inputs[i]); + } + +// every input is of type signal at the moment +// if (inputs[i].category == 'signal') { + results['category_1_score'] += current_score; + results['category_1_count'] += 1; +// } + + results['score'] += current_score; +} + +results['score'] *= params.global_identifier_type_weight; +results['normalized_score'] = 100 * results['score'] / params.risk_cap; + +return results; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.test.ts deleted file mode 100644 index 86bdc0d0e6be0c..00000000000000 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.test.ts +++ /dev/null @@ -1,123 +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 { RiskWeightTypes, RiskCategories } from '../../../../common/entity_analytics/risk_engine'; -import { - buildCategoryAssignment, - buildCategoryWeights, - buildWeightingOfScoreByCategory, -} from './risk_weights'; - -describe('buildCategoryWeights', () => { - it('returns the default weights if nothing else is provided', () => { - const result = buildCategoryWeights(); - - expect(result).toEqual([ - { host: 1, type: RiskWeightTypes.riskCategory, user: 1, value: RiskCategories.category_1 }, - ]); - }); - - it('allows user weights to override defaults', () => { - const result = buildCategoryWeights([ - { - type: RiskWeightTypes.riskCategory, - value: RiskCategories.category_1, - host: 0.1, - user: 0.2, - }, - ]); - - expect(result).toEqual([ - { - host: 0.1, - type: RiskWeightTypes.riskCategory, - user: 0.2, - value: RiskCategories.category_1, - }, - ]); - }); - - it('uses default category weights if unspecified in user-provided weight', () => { - const result = buildCategoryWeights([ - { type: RiskWeightTypes.riskCategory, value: RiskCategories.category_1, host: 0.1 }, - ]); - - expect(result).toEqual([ - { host: 0.1, type: RiskWeightTypes.riskCategory, user: 1, value: RiskCategories.category_1 }, - ]); - }); -}); - -describe('buildCategoryAssignment', () => { - it('builds the expected assignment statement', () => { - const result = buildCategoryAssignment(); - - expect(result).toMatchInlineSnapshot( - `"if (inputs[i].category == 'signal') { results['category_1_score'] += current_score; results['category_1_count'] += 1; }"` - ); - }); -}); - -describe('buildWeightingOfScoreByCategory', () => { - it('returns default weights if no user values provided', () => { - const result = buildWeightingOfScoreByCategory({ identifierType: 'user' }); - - expect(result).toMatchInlineSnapshot( - `"if (category == 'signal') { weighted_score = score * 1; } else { weighted_score = score; }"` - ); - }); - - it('returns default weights if no weights provided', () => { - const result = buildWeightingOfScoreByCategory({ userWeights: [], identifierType: 'host' }); - - expect(result).toMatchInlineSnapshot( - `"if (category == 'signal') { weighted_score = score * 1; } else { weighted_score = score; }"` - ); - }); - - it('returns default weights if only global weights provided', () => { - const result = buildWeightingOfScoreByCategory({ - userWeights: [{ type: RiskWeightTypes.global, host: 0.1 }], - identifierType: 'host', - }); - - expect(result).toMatchInlineSnapshot( - `"if (category == 'signal') { weighted_score = score * 1; } else { weighted_score = score; }"` - ); - }); - - it('returns specified weight when a category weight is provided', () => { - const result = buildWeightingOfScoreByCategory({ - userWeights: [ - { - type: RiskWeightTypes.riskCategory, - value: RiskCategories.category_1, - host: 0.1, - user: 0.2, - }, - ], - identifierType: 'host', - }); - - expect(result).toMatchInlineSnapshot( - `"if (category == 'signal') { weighted_score = score * 0.1; } else { weighted_score = score; }"` - ); - }); - - it('returns a default weight when a category weight is provided but not the one being used', () => { - const result = buildWeightingOfScoreByCategory({ - userWeights: [ - { type: RiskWeightTypes.riskCategory, value: RiskCategories.category_1, host: 0.1 }, - ], - identifierType: 'user', - }); - - expect(result).toMatchInlineSnapshot( - `"if (category == 'signal') { weighted_score = score * 1; } else { weighted_score = score; }"` - ); - }); -}); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts deleted file mode 100644 index d0c7486324e30c..00000000000000 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts +++ /dev/null @@ -1,103 +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 { keyBy, merge } from 'lodash'; -import type { - RiskScoreWeight, - RiskScoreWeightCategory, - RiskScoreWeightGlobal, - RiskScoreWeights, -} from '../../../../common/api/entity_analytics/common'; -import type { IdentifierType } from '../../../../common/entity_analytics/risk_engine'; -import { RiskCategories, RiskWeightTypes } from '../../../../common/entity_analytics/risk_engine'; - -const RISK_CATEGORIES = Object.values(RiskCategories); - -const DEFAULT_CATEGORY_WEIGHTS: RiskScoreWeights = RISK_CATEGORIES.map((category) => ({ - type: RiskWeightTypes.riskCategory, - value: category, - host: 1, - user: 1, -})); - -/* - * This function and its use can be deleted once we've replaced our use of event.kind with a proper risk category field. - */ -const convertCategoryToEventKindValue = (category?: string): string | undefined => - category === 'category_1' ? 'signal' : category; - -const isGlobalIdentifierTypeWeight = (weight: RiskScoreWeight): weight is RiskScoreWeightGlobal => - weight.type === RiskWeightTypes.global; -const isRiskCategoryWeight = (weight: RiskScoreWeight): weight is RiskScoreWeightCategory => - weight.type === RiskWeightTypes.riskCategory; - -export const getGlobalWeightForIdentifierType = ({ - identifierType, - weights, -}: { - identifierType: IdentifierType; - weights?: RiskScoreWeights; -}): number | undefined => { - return weights?.find(isGlobalIdentifierTypeWeight)?.[identifierType]; -}; - -const getRiskCategoryWeights = (weights?: RiskScoreWeights): RiskScoreWeightCategory[] => - weights?.filter(isRiskCategoryWeight) ?? []; - -const getWeightForIdentifierType = ( - weight: RiskScoreWeight, - identifierType: IdentifierType -): number => { - const configuredWeight = weight[identifierType]; - return typeof configuredWeight === 'number' ? configuredWeight : 1; -}; - -export const buildCategoryScoreDeclarations = (): string => { - return RISK_CATEGORIES.map((riskCategory) => `results['${riskCategory}_score'] = 0.0;`).join(''); -}; - -export const buildCategoryCountDeclarations = (): string => { - return RISK_CATEGORIES.map((riskCategory) => `results['${riskCategory}_count'] = 0;`).join(''); -}; - -export const buildCategoryWeights = (userWeights?: RiskScoreWeights): RiskScoreWeightCategory[] => { - const categoryWeights = getRiskCategoryWeights(userWeights); - - return Object.values( - merge({}, keyBy(DEFAULT_CATEGORY_WEIGHTS, 'value'), keyBy(categoryWeights, 'value')) - ); -}; - -export const buildCategoryAssignment = (): string => { - return RISK_CATEGORIES.map( - (category) => - `if (inputs[i].category == '${convertCategoryToEventKindValue( - category - )}') { results['${category}_score'] += current_score; results['${category}_count'] += 1; }` - ).join(' else '); -}; - -export const buildWeightingOfScoreByCategory = ({ - userWeights, - identifierType, -}: { - userWeights?: RiskScoreWeights; - identifierType: IdentifierType; -}): string => { - const otherClause = `weighted_score = score;`; - const categoryWeights = buildCategoryWeights(userWeights); - - return categoryWeights - .map( - (weight) => - `if (category == '${convertCategoryToEventKindValue( - weight.value - )}') { weighted_score = score * ${getWeightForIdentifierType(weight, identifierType)}; }` - ) - .join(' else ') - .concat(` else { ${otherClause} }`); -}; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts index a35f4978ebf2c5..b5ff9c3487a071 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts @@ -8,10 +8,7 @@ import { loggerMock } from '@kbn/logging-mocks'; import { RISK_SCORE_PREVIEW_URL } from '../../../../../common/constants'; -import { - RiskCategories, - RiskWeightTypes, -} from '../../../../../common/entity_analytics/risk_engine'; +import { RiskWeightTypes } from '../../../../../common/entity_analytics/risk_engine'; import { serverMock, requestContextMock, @@ -171,8 +168,7 @@ describe('POST risk_engine/preview route', () => { const request = buildRequest({ weights: [ { - type: RiskWeightTypes.riskCategory, - value: RiskCategories.category_1, + type: RiskWeightTypes.global, host: 0.1, user: 0.2, }, @@ -186,8 +182,7 @@ describe('POST risk_engine/preview route', () => { expect.objectContaining({ weights: [ { - type: RiskWeightTypes.riskCategory, - value: RiskCategories.category_1, + type: RiskWeightTypes.global, host: 0.1, user: 0.2, }, @@ -200,8 +195,7 @@ describe('POST risk_engine/preview route', () => { const request = buildRequest({ weights: [ { - type: RiskWeightTypes.riskCategory, - value: RiskCategories.category_1, + type: RiskWeightTypes.global, host: 1.1, }, ], @@ -218,7 +212,6 @@ describe('POST risk_engine/preview route', () => { weights: [ { type: 'something new', - value: RiskCategories.category_1, host: 0.1, user: 0.2, }, diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts index 98ea7b172583cc..28ebe8dae5f56b 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts @@ -514,56 +514,6 @@ export default ({ getService }: FtrProviderContext): void => { }); }); - context('with category weights', () => { - it('weights risk inputs from different categories according to the category weight', async () => { - const documentId = uuidv4(); - const userSignal = buildDocument( - { 'event.kind': 'signal', 'user.name': 'user-1' }, - documentId - ); - const hostSignal = buildDocument( - { 'event.kind': 'signal', 'host.name': 'host-1' }, - documentId - ); - await indexListOfDocuments(Array(50).fill(userSignal).concat(Array(50).fill(hostSignal))); - - await createAndSyncRuleAndAlerts({ - query: `id: ${documentId}`, - alerts: 100, - riskScore: 100, - }); - const { scores } = await previewRiskScores({ - body: { - weights: [{ type: 'risk_category', value: 'category_1', host: 0.4, user: 0.8 }], - }, - }); - - expect(sanitizeScores(scores.host!)).to.eql([ - { - calculated_level: 'Low', - calculated_score: 93.2375911647125, - calculated_score_norm: 35.695861854790394, - category_1_score: 35.69586185479039, - category_1_count: 50, - id_field: 'host.name', - id_value: 'host-1', - }, - ]); - - expect(sanitizeScores(scores.user!)).to.eql([ - { - calculated_level: 'High', - calculated_score: 186.475182329425, - calculated_score_norm: 71.39172370958079, - category_1_score: 71.39172370958077, - category_1_count: 50, - id_field: 'user.name', - id_value: 'user-1', - }, - ]); - }); - }); - describe('@skipInServerless with asset criticality data', () => { const assetCriticalityRoutes = assetCriticalityRouteHelpersFactory(supertest); From e814a77e97be091b34feadd846d69ef38a583665 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 20 May 2024 11:01:23 -0700 Subject: [PATCH 31/97] [UII] Fix request diagnostics action expiration threshold (#183788) ## Summary Resolves https://github.com/elastic/kibana/issues/183692. This PR: - Corrects the expiration so that it is 3 hours - Makes sure it is applied when bulk requesting diagnostics too - Adjusts API integration tests to ensure the correct expiration is applied --- x-pack/plugins/fleet/common/constants/index.ts | 2 ++ x-pack/plugins/fleet/server/constants/index.ts | 1 + x-pack/plugins/fleet/server/services/agents/actions.ts | 5 +++-- .../fleet/server/services/agents/request_diagnostics.test.ts | 3 +++ .../fleet/server/services/agents/request_diagnostics.ts | 4 +--- .../services/agents/request_diagnostics_action_runner.ts | 5 ++--- .../fleet_api_integration/apis/agents/request_diagnostics.ts | 4 ++++ 7 files changed, 16 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/fleet/common/constants/index.ts b/x-pack/plugins/fleet/common/constants/index.ts index 3c275f87e1aeaf..51d51db9e761fa 100644 --- a/x-pack/plugins/fleet/common/constants/index.ts +++ b/x-pack/plugins/fleet/common/constants/index.ts @@ -56,4 +56,6 @@ export const DATA_TIERS = ['data_hot']; export const FLEET_ENROLLMENT_API_PREFIX = 'fleet-enrollment-api-keys'; +export const REQUEST_DIAGNOSTICS_TIMEOUT_MS = 3 * 60 * 60 * 1000; // 3 hours; + export * from './mappings'; diff --git a/x-pack/plugins/fleet/server/constants/index.ts b/x-pack/plugins/fleet/server/constants/index.ts index 55ad1f9881a8a3..bf5179546c3f04 100644 --- a/x-pack/plugins/fleet/server/constants/index.ts +++ b/x-pack/plugins/fleet/server/constants/index.ts @@ -19,6 +19,7 @@ export { UNPRIVILEGED_AGENT_KUERY, PRIVILEGED_AGENT_KUERY, MAX_TIME_COMPLETE_INSTALL, + REQUEST_DIAGNOSTICS_TIMEOUT_MS, // Routes LIMITED_CONCURRENCY_ROUTE_TAG, PLUGIN_ID, diff --git a/x-pack/plugins/fleet/server/services/agents/actions.ts b/x-pack/plugins/fleet/server/services/agents/actions.ts index 00a4d6de37d1bd..bda3090f25d0ea 100644 --- a/x-pack/plugins/fleet/server/services/agents/actions.ts +++ b/x-pack/plugins/fleet/server/services/agents/actions.ts @@ -43,13 +43,14 @@ export async function createAgentAction( newAgentAction: NewAgentAction ): Promise { const actionId = newAgentAction.id ?? uuidv4(); - const timestamp = new Date().toISOString(); + const now = Date.now(); + const timestamp = new Date(now).toISOString(); const body: FleetServerAgentAction = { '@timestamp': timestamp, expiration: newAgentAction.expiration === NO_EXPIRATION ? undefined - : newAgentAction.expiration ?? new Date(Date.now() + ONE_MONTH_IN_MS).toISOString(), + : newAgentAction.expiration ?? new Date(now + ONE_MONTH_IN_MS).toISOString(), agents: newAgentAction.agents, action_id: actionId, data: newAgentAction.data, diff --git a/x-pack/plugins/fleet/server/services/agents/request_diagnostics.test.ts b/x-pack/plugins/fleet/server/services/agents/request_diagnostics.test.ts index b297e4cb7c5840..a6aa09ee2a36db 100644 --- a/x-pack/plugins/fleet/server/services/agents/request_diagnostics.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/request_diagnostics.test.ts @@ -31,6 +31,7 @@ describe('requestDiagnostics', () => { body: expect.objectContaining({ agents: ['agent-in-regular-policy'], type: 'REQUEST_DIAGNOSTICS', + expiration: expect.anything(), }), index: '.fleet-actions', }) @@ -50,6 +51,7 @@ describe('requestDiagnostics', () => { body: expect.objectContaining({ agents: ['agent-in-regular-policy-newer', 'agent-in-regular-policy-newer2'], type: 'REQUEST_DIAGNOSTICS', + expiration: expect.anything(), }), index: '.fleet-actions', }) @@ -66,6 +68,7 @@ describe('requestDiagnostics', () => { body: expect.objectContaining({ agents: ['agent-in-regular-policy-newer', 'agent-in-regular-policy'], type: 'REQUEST_DIAGNOSTICS', + expiration: expect.anything(), }), index: '.fleet-actions', }) diff --git a/x-pack/plugins/fleet/server/services/agents/request_diagnostics.ts b/x-pack/plugins/fleet/server/services/agents/request_diagnostics.ts index e2ed7e7ae8f1f9..323af2ad29314c 100644 --- a/x-pack/plugins/fleet/server/services/agents/request_diagnostics.ts +++ b/x-pack/plugins/fleet/server/services/agents/request_diagnostics.ts @@ -9,7 +9,7 @@ import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/ import type { RequestDiagnosticsAdditionalMetrics } from '../../../common/types'; -import { SO_SEARCH_LIMIT } from '../../constants'; +import { SO_SEARCH_LIMIT, REQUEST_DIAGNOSTICS_TIMEOUT_MS } from '../../constants'; import type { GetAgentsOptions } from '.'; import { getAgents, getAgentsByKuery } from './crud'; @@ -20,8 +20,6 @@ import { requestDiagnosticsBatch, } from './request_diagnostics_action_runner'; -const REQUEST_DIAGNOSTICS_TIMEOUT_MS = 3 * 60 * 1000; // 3 hours; - export async function requestDiagnostics( esClient: ElasticsearchClient, agentId: string, diff --git a/x-pack/plugins/fleet/server/services/agents/request_diagnostics_action_runner.ts b/x-pack/plugins/fleet/server/services/agents/request_diagnostics_action_runner.ts index a2d2d753eaa717..073297fabe8fa1 100644 --- a/x-pack/plugins/fleet/server/services/agents/request_diagnostics_action_runner.ts +++ b/x-pack/plugins/fleet/server/services/agents/request_diagnostics_action_runner.ts @@ -9,11 +9,9 @@ import { v4 as uuidv4 } from 'uuid'; import type { ElasticsearchClient } from '@kbn/core/server'; import type { RequestDiagnosticsAdditionalMetrics } from '../../../common/types'; - import { isAgentRequestDiagnosticsSupported } from '../../../common/services'; - import type { Agent } from '../../types'; - +import { REQUEST_DIAGNOSTICS_TIMEOUT_MS } from '../../constants'; import { FleetError } from '../../errors'; import { ActionRunner } from './action_runner'; @@ -64,6 +62,7 @@ export async function requestDiagnosticsBatch( agents: agentIds, created_at: now, type: 'REQUEST_DIAGNOSTICS', + expiration: new Date(Date.now() + REQUEST_DIAGNOSTICS_TIMEOUT_MS).toISOString(), total, data: { additional_metrics: options.additionalMetrics, diff --git a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts index 70b1b2c20b1d1a..679f409b256025 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import moment from 'moment'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { setupFleetAndAgents } from './services'; @@ -39,6 +40,9 @@ export default function (providerContext: FtrProviderContext) { const actionStatus = body.items[0]; expect(actionStatus.nbAgentsActionCreated).to.eql(agentCount); + expect( + moment(actionStatus.expiration).diff(moment(actionStatus.creationTime), 'hours') + ).to.eql(3); } it('should respond 403 if user lacks fleet read permissions', async () => { From 94986625001f54becd2d44508d3030ad4f07e196 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 19:02:10 +0100 Subject: [PATCH 32/97] skip flaky suite (#179582) --- .../rule_details_flow/add_edit_endpoint_exception.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/exceptions/rule_details_flow/add_edit_endpoint_exception.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/exceptions/rule_details_flow/add_edit_endpoint_exception.cy.ts index 61c409f63a5dc1..07be6f79efd451 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/exceptions/rule_details_flow/add_edit_endpoint_exception.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/exceptions/rule_details_flow/add_edit_endpoint_exception.cy.ts @@ -134,7 +134,8 @@ describe('Add endpoint exception from rule details', { tags: ['@ess', '@serverle }); }); - describe('with exception items', () => { + // FLAKY: https://github.com/elastic/kibana/issues/179582 + describe.skip('with exception items', () => { beforeEach(() => { createEndpointExceptionList().then((response) => { createEndpointExceptionListItem({ From c744649a63c0e6e421e9d34719b08b4952ac891c Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 20 May 2024 11:22:59 -0700 Subject: [PATCH 33/97] [UII] Surface option to delete diagnostics files (#183690) ## Summary Resolves https://github.com/elastic/kibana/issues/167366. This PR introduces the ability to manually delete diagnostics files before their ILM policy kicks in. This PR: - Adds a new `DELETE /api/fleet/agents/files/{fileId}` route which returns `{id: string, deleted: boolean}` - Deletes the file from `.fleet-fileds-fromhost-data-agent` data stream when a request is received, and updates the corresponding meta information in `.fleet-fileds-fromhost-meta-agent` to set it to `DELETED` status - This is similar to how the meta information [reconciliation via task manager](https://github.com/elastic/kibana/blob/9e5d6b3e0fa731a37374c091cd7284d1c41f116e/x-pack/plugins/fleet/server/services/files/index.ts#L148) is done when the ILM policy deletes diagnostics file - Updates the Agent details > Diagnostics tab: - Surface Delete action in files table for requests that resulted in files - Refactors existing UI around the copy text and generate button - Add `Show expired requests` toggle - Off by default, which means the following will be shown: - Files that are on disk - Files being generated - File requests which errored out but are still not expired (i.e. users can see errors with recent requests) - When toggled on, will additionally show: - File requests which errored out AND are expired - File requests that are just expired (i.e. edge case where a file was deleted by ILM but the meta info had not yet reconciled) FYI, the expiration threshold is currently only 3 minutes. This is a bug, see: https://github.com/elastic/kibana/issues/183692 The main reason for adding this toggle is to keep the initial list view clean. The items in this list are built from all `REQUEST_DIAGNOSTICS` agent actions that the user submits, which can be on a single agent or bulk agents. When a file is deleted manually with this new work, or by the existing ILM policy, we can correctly flag the associated action as having `DELETED` files and hide it from view. But when a request errors out or otherwise results in no files being generated, we still want to keep the history of the request (we have no precedent of deleting agent activity). Over time, this history is no longer useful for the user and just pollutes the table, so it is better to hide these items from the initial view. image image ### Testing Use the single and bulk request diagnostics feature and test the delete functionality. Go nuts :) ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../plugins/fleet/common/constants/routes.ts | 1 + .../plugins/fleet/common/openapi/bundled.json | 49 ++- .../plugins/fleet/common/openapi/bundled.yaml | 31 +- .../fleet/common/openapi/entrypoint.yaml | 4 +- .../openapi/paths/agents@files@{file_id}.yaml | 28 ++ .../plugins/fleet/common/services/routes.ts | 2 + .../fleet/common/types/models/agent.ts | 2 +- .../fleet/common/types/rest_spec/agent.ts | 5 + .../components/agent_diagnostics/index.tsx | 220 ++++++++---- .../agent_request_diagnostics_modal/index.tsx | 2 +- .../fleet/public/hooks/use_request/agents.ts | 10 + .../fleet/server/routes/agent/handlers.ts | 15 + .../fleet/server/routes/agent/index.ts | 17 + .../agents/__snapshots__/uploads.test.ts.snap | 55 +++ .../fleet/server/services/agents/index.ts | 2 +- .../server/services/agents/uploads.test.ts | 134 ++++++++ .../services/agents/uploads.test_fixtures.ts | 173 ++++++++++ .../fleet/server/services/agents/uploads.ts | 76 ++++- .../fleet/server/services/files/index.ts | 4 +- .../fleet/server/types/rest_spec/agent.ts | 6 + .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../apis/agents/uploads.ts | 320 ++++++++++++------ 24 files changed, 967 insertions(+), 192 deletions(-) create mode 100644 x-pack/plugins/fleet/common/openapi/paths/agents@files@{file_id}.yaml create mode 100644 x-pack/plugins/fleet/server/services/agents/__snapshots__/uploads.test.ts.snap create mode 100644 x-pack/plugins/fleet/server/services/agents/uploads.test.ts create mode 100644 x-pack/plugins/fleet/server/services/agents/uploads.test_fixtures.ts diff --git a/x-pack/plugins/fleet/common/constants/routes.ts b/x-pack/plugins/fleet/common/constants/routes.ts index 9fe1f4b49d7d86..ee775ff1dbdd86 100644 --- a/x-pack/plugins/fleet/common/constants/routes.ts +++ b/x-pack/plugins/fleet/common/constants/routes.ts @@ -160,6 +160,7 @@ export const AGENT_API_ROUTES = { LIST_TAGS_PATTERN: `${API_ROOT}/agents/tags`, LIST_UPLOADS_PATTERN: `${API_ROOT}/agents/{agentId}/uploads`, GET_UPLOAD_FILE_PATTERN: `${API_ROOT}/agents/files/{fileId}/{fileName}`, + DELETE_UPLOAD_FILE_PATTERN: `${API_ROOT}/agents/files/{fileId}`, }; export const ENROLLMENT_API_KEY_ROUTES = { diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 9a86cbe6f9fd10..053be80ff445a7 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -2503,7 +2503,7 @@ ] } }, - "/agents/files@{fileId}@{fileName}": { + "/agents/files/{fileId}/{fileName}": { "parameters": [ { "schema": { @@ -2559,6 +2559,53 @@ "operationId": "get-agent-upload-file" } }, + "/agents/files/{fileId}": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "fileId", + "in": "path", + "required": true + } + ], + "delete": { + "summary": "Delete file uploaded by agent", + "tags": [ + "Agents" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "deleted": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/error" + } + }, + "operationId": "delete-agent-upload-file" + } + }, "/agents/{agentId}/reassign": { "parameters": [ { diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 16137b6f8dd279..041147d26efbb0 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -1581,7 +1581,7 @@ paths: operationId: agent-action-cancel parameters: - $ref: '#/components/parameters/kbn_xsrf' - /agents/files@{fileId}@{fileName}: + /agents/files/{fileId}/{fileName}: parameters: - schema: type: string @@ -1616,6 +1616,35 @@ paths: '400': $ref: '#/components/responses/error' operationId: get-agent-upload-file + /agents/files/{fileId}: + parameters: + - schema: + type: string + name: fileId + in: path + required: true + delete: + summary: Delete file uploaded by agent + tags: + - Agents + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + body: + type: object + properties: + id: + type: string + deleted: + type: boolean + '400': + $ref: '#/components/responses/error' + operationId: delete-agent-upload-file /agents/{agentId}/reassign: parameters: - schema: diff --git a/x-pack/plugins/fleet/common/openapi/entrypoint.yaml b/x-pack/plugins/fleet/common/openapi/entrypoint.yaml index 8feb15cb8698e3..04203cc5d2e6b9 100644 --- a/x-pack/plugins/fleet/common/openapi/entrypoint.yaml +++ b/x-pack/plugins/fleet/common/openapi/entrypoint.yaml @@ -77,8 +77,10 @@ paths: $ref: 'paths/agents@{agent_id}@actions.yaml' '/agents/{agentId}/actions/{actionId}/cancel': $ref: 'paths/agents@{agent_id}@actions@{action_id}@cancel.yaml' - '/agents/files@{fileId}@{fileName}': + '/agents/files/{fileId}/{fileName}': $ref: 'paths/agents@files@{file_id}@{file_name}.yaml' + '/agents/files/{fileId}': + $ref: 'paths/agents@files@{file_id}.yaml' '/agents/{agentId}/reassign': $ref: 'paths/agents@{agent_id}@reassign.yaml' '/agents/{agentId}/unenroll': diff --git a/x-pack/plugins/fleet/common/openapi/paths/agents@files@{file_id}.yaml b/x-pack/plugins/fleet/common/openapi/paths/agents@files@{file_id}.yaml new file mode 100644 index 00000000000000..4507cb8ce456dd --- /dev/null +++ b/x-pack/plugins/fleet/common/openapi/paths/agents@files@{file_id}.yaml @@ -0,0 +1,28 @@ +parameters: + - schema: + type: string + name: fileId + in: path + required: true +delete: + summary: Delete file uploaded by agent + tags: + - Agents + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + body: + type: object + properties: + id: + type: string + deleted: + type: boolean + '400': + $ref: ../components/responses/error.yaml + operationId: delete-agent-upload-file diff --git a/x-pack/plugins/fleet/common/services/routes.ts b/x-pack/plugins/fleet/common/services/routes.ts index 5d8f2c48914dae..76b963949699a4 100644 --- a/x-pack/plugins/fleet/common/services/routes.ts +++ b/x-pack/plugins/fleet/common/services/routes.ts @@ -236,6 +236,8 @@ export const agentRouteService = { '{fileName}', fileName ), + getAgentFileDeletePath: (fileId: string) => + AGENT_API_ROUTES.DELETE_UPLOAD_FILE_PATTERN.replace('{fileId}', fileId), getAgentsByActionsPath: () => AGENT_API_ROUTES.LIST_PATTERN, }; diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 84636e380fd62a..89b533c47341fb 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -187,7 +187,7 @@ export interface AgentDiagnostics { name: string; createTime: string; filePath: string; - status: 'READY' | 'AWAITING_UPLOAD' | 'DELETED' | 'IN_PROGRESS' | 'FAILED'; + status: 'READY' | 'AWAITING_UPLOAD' | 'DELETED' | 'EXPIRED' | 'IN_PROGRESS' | 'FAILED'; actionId: string; error?: string; } diff --git a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts index b175d336a8f23b..bb69346bbdce40 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts @@ -54,6 +54,11 @@ export interface GetAgentUploadsResponse { items: AgentDiagnostics[]; } +export interface DeleteAgentUploadResponse { + id: string; + deleted: boolean; +} + export interface PostNewAgentActionRequest { body: { action: Omit; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx index 1eaea92be96397..1bb7e1ee0ad006 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx @@ -5,13 +5,12 @@ * 2.0. */ -import type { EuiTableFieldDataColumnType } from '@elastic/eui'; -import { EuiPortal } from '@elastic/eui'; -import { EuiToolTip } from '@elastic/eui'; +import type { EuiBasicTableColumn } from '@elastic/eui'; import { + EuiPortal, + EuiToolTip, EuiBasicTable, EuiButton, - EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiIcon, @@ -20,9 +19,10 @@ import { EuiText, EuiSkeletonText, formatDate, + EuiSpacer, + EuiSwitch, } from '@elastic/eui'; import React, { useCallback, useEffect, useState } from 'react'; -import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -31,18 +31,16 @@ import { MINIMUM_DIAGNOSTICS_AGENT_VERSION, } from '../../../../../../../../common/services'; -import { sendGetAgentUploads, useAuthz, useLink, useStartServices } from '../../../../../hooks'; +import { + sendGetAgentUploads, + useAuthz, + useLink, + useStartServices, + sendDeleteAgentUpload, +} from '../../../../../hooks'; import type { AgentDiagnostics, Agent } from '../../../../../../../../common/types/models'; import { AgentRequestDiagnosticsModal } from '../../../components/agent_request_diagnostics_modal'; -const FlexStartEuiFlexItem = styled(EuiFlexItem)` - align-self: flex-start; -`; - -const MarginedIcon = styled(EuiIcon)` - margin-right: 7px; -`; - export interface AgentDiagnosticsProps { agent: Agent; } @@ -52,7 +50,9 @@ export const AgentDiagnosticsTab: React.FunctionComponent const { notifications } = useStartServices(); const { getAbsolutePath } = useLink(); const [isLoading, setIsLoading] = useState(true); - const [diagnosticsEntries, setDiagnosticEntries] = useState([]); + const [isShowingExpiredEntries, setIsShowingExpiredEntries] = useState(false); + const [visibleDiagnosticsEntries, setVisibleDiagnosticEntries] = useState([]); + const [allDiagnosticsEntries, setAllDiagnosticEntries] = useState([]); const [prevDiagnosticsEntries, setPrevDiagnosticEntries] = useState([]); const [loadInterval, setLoadInterval] = useState(10000); const [isRequestDiagnosticsModalOpen, setIsRequestDiagnosticsModalOpen] = useState(false); @@ -68,7 +68,7 @@ export const AgentDiagnosticsTab: React.FunctionComponent throw new Error('No data'); } const entries = uploadsResponse.data.items; - setDiagnosticEntries(entries); + setAllDiagnosticEntries(entries); setIsLoading(false); // query faster if an action is in progress, for quicker feedback @@ -93,6 +93,31 @@ export const AgentDiagnosticsTab: React.FunctionComponent } }, [agent.id, notifications.toasts, setLoadInterval]); + const deleteFile = (fileId: string) => { + sendDeleteAgentUpload(fileId).then(({ data, error }) => { + if (error || data?.deleted === false) { + notifications.toasts.addError(error || new Error('Request returned `deleted: false`'), { + title: i18n.translate( + 'xpack.fleet.requestDiagnostics.errorDeletingUploadNotificationTitle', + { + defaultMessage: 'Error deleting diagnostics file', + } + ), + }); + } else { + notifications.toasts.addSuccess({ + title: i18n.translate( + 'xpack.fleet.requestDiagnostics.successDeletingUploadNotificationTitle', + { + defaultMessage: 'Diagnostics file deleted', + } + ), + }); + } + loadData(); + }); + }; + useEffect(() => { loadData(); const interval: ReturnType | null = setInterval(async () => { @@ -109,9 +134,9 @@ export const AgentDiagnosticsTab: React.FunctionComponent }, [loadData, loadInterval]); useEffect(() => { - setPrevDiagnosticEntries(diagnosticsEntries); + setPrevDiagnosticEntries(allDiagnosticsEntries); if (prevDiagnosticsEntries.length > 0) { - diagnosticsEntries + allDiagnosticsEntries .filter((newEntry) => { const oldEntry = prevDiagnosticsEntries.find((entry) => entry.id === newEntry.id); return newEntry.status === 'READY' && (!oldEntry || oldEntry?.status !== 'READY'); @@ -130,17 +155,26 @@ export const AgentDiagnosticsTab: React.FunctionComponent ); }); } - }, [prevDiagnosticsEntries, diagnosticsEntries, notifications.toasts]); + }, [prevDiagnosticsEntries, allDiagnosticsEntries, notifications.toasts]); - const errorIcon = ; - const getErrorMessage = (error?: string) => (error ? `Error: ${error}` : ''); + useEffect(() => { + if (isShowingExpiredEntries) { + setVisibleDiagnosticEntries(allDiagnosticsEntries); + } else { + setVisibleDiagnosticEntries( + allDiagnosticsEntries.filter((entry) => entry.status !== 'EXPIRED') + ); + } + }, [allDiagnosticsEntries, isShowingExpiredEntries]); - const columns: Array> = [ + const columns: Array> = [ { field: 'id', - name: 'File', + name: i18n.translate('xpack.fleet.requestDiagnostics.tableColumns.fileLabelText', { + defaultMessage: 'File', + }), render: (id: string) => { - const currentItem = diagnosticsEntries.find((item) => item.id === id); + const currentItem = allDiagnosticsEntries.find((item) => item.id === id); return currentItem?.status === 'READY' ? (   {currentItem?.name} @@ -155,45 +189,81 @@ export const AgentDiagnosticsTab: React.FunctionComponent ) : ( - {currentItem?.status ? ( - -

Diagnostics status: {currentItem?.status}

-

{getErrorMessage(currentItem?.error)}

- - } - > - {errorIcon} -
- ) : ( - errorIcon - )} -   - {currentItem?.name} + + {currentItem?.error ? ( + + + } + > + + + + ) : currentItem?.status ? ( + + + + + + ) : null} + {currentItem?.name} +
); }, }, { field: 'id', - name: 'Date', + name: i18n.translate('xpack.fleet.requestDiagnostics.tableColumns.dateLabelText', { + defaultMessage: 'Date', + }), dataType: 'date', render: (id: string) => { - const currentItem = diagnosticsEntries.find((item) => item.id === id); + const currentItem = allDiagnosticsEntries.find((item) => item.id === id); return ( - + {formatDate(currentItem?.createTime, 'lll')} ); }, }, + { + name: i18n.translate('xpack.fleet.requestDiagnostics.tableColumns.actionsLabelText', { + defaultMessage: 'Actions', + }), + width: '70px', + actions: [ + { + type: 'icon', + icon: 'trash', + color: 'danger', + name: i18n.translate('xpack.fleet.requestDiagnostics.tableColumns.deleteButtonText', { + defaultMessage: 'Delete', + }), + available: (item: AgentDiagnostics) => item.status === 'READY', + description: i18n.translate( + 'xpack.fleet.requestDiagnostics.tableColumns.deleteButtonDesc', + { + defaultMessage: 'Delete diagnostics file', + } + ), + onClick: (item: AgentDiagnostics) => { + deleteFile(item.id); + }, + }, + ], + }, ]; const requestDiagnosticsButton = ( { setIsRequestDiagnosticsModalOpen(true); }} @@ -215,29 +285,27 @@ export const AgentDiagnosticsTab: React.FunctionComponent agentCount={1} onClose={() => { setIsRequestDiagnosticsModalOpen(false); + loadData(); }} /> )} - - - - } - > - - - - + +

+ +

+
+ + + {isAgentRequestDiagnosticsSupported(agent) ? ( requestDiagnosticsButton ) : ( @@ -253,15 +321,27 @@ export const AgentDiagnosticsTab: React.FunctionComponent {requestDiagnosticsButton} )} -
- - {isLoading ? ( - - ) : ( - items={diagnosticsEntries} columns={columns} /> - )} + + + + } + checked={isShowingExpiredEntries} + onChange={(e) => setIsShowingExpiredEntries(e.target.checked)} + />
+ + + {isLoading ? ( + + ) : ( + items={visibleDiagnosticsEntries} columns={columns} /> + )} ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_request_diagnostics_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_request_diagnostics_modal/index.tsx index 82bf1f1b318742..9ea94aaeb134ab 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_request_diagnostics_modal/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_request_diagnostics_modal/index.tsx @@ -125,7 +125,7 @@ export const AgentRequestDiagnosticsModal: React.FunctionComponent = ({

diff --git a/x-pack/plugins/fleet/public/hooks/use_request/agents.ts b/x-pack/plugins/fleet/public/hooks/use_request/agents.ts index 7b9f8600dcd696..236c470cd15b77 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/agents.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/agents.ts @@ -17,6 +17,7 @@ import type { PostRequestBulkDiagnosticsRequest, PostRequestDiagnosticsRequest, PostRequestDiagnosticsResponse, + DeleteAgentUploadResponse, UpdateAgentRequest, } from '../../../common/types'; @@ -244,6 +245,15 @@ export function sendGetAgentUploads(agentId: string, options?: RequestOptions) { }); } +export function sendDeleteAgentUpload(fileId: string, options?: RequestOptions) { + return sendRequest({ + path: agentRouteService.getAgentFileDeletePath(fileId), + method: 'delete', + version: API_VERSIONS.public.v1, + ...options, + }); +} + export const useGetAgentUploads = (agentId: string, options?: RequestOptions) => { return useRequest({ path: agentRouteService.getListAgentUploads(agentId), diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index f4d87b9193899b..b292cc2f88c332 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -35,6 +35,7 @@ import type { PostBulkUpdateAgentTagsRequestSchema, GetActionStatusRequestSchema, GetAgentUploadFileRequestSchema, + DeleteAgentUploadFileRequestSchema, PostRetrieveAgentsByActionsRequestSchema, } from '../../types'; import { defaultFleetErrorHandler } from '../../errors'; @@ -429,3 +430,17 @@ export const getAgentUploadFileHandler: RequestHandler< return defaultFleetErrorHandler({ error, response }); } }; + +export const deleteAgentUploadFileHandler: RequestHandler< + TypeOf +> = async (context, request, response) => { + const coreContext = await context.core; + const esClient = coreContext.elasticsearch.client.asInternalUser; + try { + const resp = await AgentService.deleteAgentUploadFile(esClient, request.params.fileId); + + return response.ok({ body: resp }); + } catch (error) { + return defaultFleetErrorHandler({ error, response }); + } +}; diff --git a/x-pack/plugins/fleet/server/routes/agent/index.ts b/x-pack/plugins/fleet/server/routes/agent/index.ts index 212397a5c3a99e..640a9f69ed4d62 100644 --- a/x-pack/plugins/fleet/server/routes/agent/index.ts +++ b/x-pack/plugins/fleet/server/routes/agent/index.ts @@ -34,6 +34,7 @@ import { ListAgentUploadsRequestSchema, GetAgentUploadFileRequestSchema, PostRetrieveAgentsByActionsRequestSchema, + DeleteAgentUploadFileRequestSchema, } from '../../types'; import * as AgentService from '../../services/agents'; import type { FleetConfigType } from '../..'; @@ -57,6 +58,7 @@ import { getActionStatusHandler, getAgentUploadsHandler, getAgentUploadFileHandler, + deleteAgentUploadFileHandler, postAgentsReassignHandler, postRetrieveAgentsByActionsHandler, } from './handlers'; @@ -332,6 +334,21 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT getAgentUploadFileHandler ); + router.versioned + .delete({ + path: AGENT_API_ROUTES.DELETE_UPLOAD_FILE_PATTERN, + fleetAuthz: { + fleet: { readAgents: true }, + }, + }) + .addVersion( + { + version: API_VERSIONS.public.v1, + validate: { request: DeleteAgentUploadFileRequestSchema }, + }, + deleteAgentUploadFileHandler + ); + // Get agent status for policy router.versioned .get({ diff --git a/x-pack/plugins/fleet/server/services/agents/__snapshots__/uploads.test.ts.snap b/x-pack/plugins/fleet/server/services/agents/__snapshots__/uploads.test.ts.snap new file mode 100644 index 00000000000000..14afaaf1f8f078 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agents/__snapshots__/uploads.test.ts.snap @@ -0,0 +1,55 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getAgentUploads should return right list of files 1`] = ` +Array [ + Object { + "actionId": "current-in-progress-action", + "error": undefined, + "filePath": "", + "id": "current-in-progress-action", + "status": "IN_PROGRESS", + }, + Object { + "actionId": "current-complete-action", + "error": undefined, + "filePath": "/api/fleet/agents/files/current-complete-file/current-complete-file.zip", + "id": "current-complete-file", + "status": "READY", + }, + Object { + "actionId": "expired-incomplete-action", + "error": undefined, + "filePath": "", + "id": "expired-incomplete-action", + "status": "EXPIRED", + }, + Object { + "actionId": "expired-complete-action", + "error": undefined, + "filePath": "/api/fleet/agents/files/expired-complete-file/expired-complete-file.zip", + "id": "expired-complete-file", + "status": "READY", + }, + Object { + "actionId": "current-error-action", + "error": "some diagnostics err", + "filePath": "", + "id": "current-error-action", + "status": "FAILED", + }, + Object { + "actionId": "expired-error-action", + "error": "some diagnostics err", + "filePath": "", + "id": "expired-error-action", + "status": "EXPIRED", + }, + Object { + "actionId": "old-complete-action", + "error": undefined, + "filePath": "/api/fleet/agents/files/old-complete-file/old-complete-file.zip", + "id": "old-complete-file", + "status": "READY", + }, +] +`; diff --git a/x-pack/plugins/fleet/server/services/agents/index.ts b/x-pack/plugins/fleet/server/services/agents/index.ts index 2fad96c87bb79d..6ffd24f5777cf4 100644 --- a/x-pack/plugins/fleet/server/services/agents/index.ts +++ b/x-pack/plugins/fleet/server/services/agents/index.ts @@ -15,7 +15,7 @@ export * from './reassign'; export * from './update_agent_tags'; export * from './action_status'; export * from './request_diagnostics'; -export { getAgentUploads, getAgentUploadFile } from './uploads'; +export { getAgentUploads, getAgentUploadFile, deleteAgentUploadFile } from './uploads'; export { AgentServiceImpl } from './agent_service'; export type { AgentClient, AgentService } from './agent_service'; export { BulkActionsResolver } from './bulk_actions_resolver'; diff --git a/x-pack/plugins/fleet/server/services/agents/uploads.test.ts b/x-pack/plugins/fleet/server/services/agents/uploads.test.ts new file mode 100644 index 00000000000000..213b0cc2179532 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agents/uploads.test.ts @@ -0,0 +1,134 @@ +/* + * 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 { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; + +import { AGENT_ACTIONS_INDEX, AGENT_ACTIONS_RESULTS_INDEX } from '../../../common'; +import { FILE_STORAGE_METADATA_AGENT_INDEX } from '../../constants'; + +import { appContextService } from '../app_context'; +import { createAppContextStartContractMock } from '../../mocks'; + +import { deleteAgentUploadFile, getAgentUploads } from './uploads'; +import { + AGENT_ACTIONS_FIXTURES, + AGENT_ACTIONS_RESULTS_FIXTURES, + FILES_METADATA_BY_ACTION_ID, +} from './uploads.test_fixtures'; + +describe('getAgentUploads', () => { + const esClient = {} as ElasticsearchClient; + + beforeAll(async () => { + appContextService.start(createAppContextStartContractMock()); + }); + + afterAll(() => { + appContextService.stop(); + }); + + it('should return right list of files', async () => { + esClient.search = jest.fn().mockImplementation(({ index, query }) => { + if (index === AGENT_ACTIONS_INDEX) { + return { hits: { hits: AGENT_ACTIONS_FIXTURES } }; + } + + if (index === AGENT_ACTIONS_RESULTS_INDEX) { + return { hits: { hits: AGENT_ACTIONS_RESULTS_FIXTURES } }; + } + + if (index === FILE_STORAGE_METADATA_AGENT_INDEX) { + const actionId = query.bool.filter.bool.must[1].term.action_id as string; + if (FILES_METADATA_BY_ACTION_ID[actionId]) { + return { hits: { hits: [FILES_METADATA_BY_ACTION_ID[actionId]] } }; + } else { + return { hits: { hits: [] } }; + } + } + }); + + const response = await getAgentUploads(esClient, 'agent-1'); + expect(response.length).toBe(7); + expect(response.filter((i) => i.status === 'DELETED').length).toBe(0); + response.forEach((item) => { + expect(item.name).toBeDefined(); + if (item.status === 'READY') { + expect(item.name).toEqual(`${item.id}.zip`); + } else { + expect(item.name).toMatch(new RegExp(`^elastic-agent-diagnostics-.*\.zip$`)); + } + }); + expect(response.map(({ createTime, name, ...rest }) => rest)).toMatchSnapshot(); + }); +}); + +describe('deleteAgentUploadFile', () => { + const esClient = {} as ElasticsearchClient; + const id = 'agent-upload-file-id'; + + beforeAll(async () => { + appContextService.start(createAppContextStartContractMock()); + }); + + afterAll(() => { + appContextService.stop(); + }); + + describe('should return success', () => { + it('if the file was deleted and metadata was updated normally', async () => { + esClient.deleteByQuery = jest.fn().mockResolvedValueOnce({ deleted: 1 }); + esClient.updateByQuery = jest.fn().mockResolvedValueOnce({ total: 1 }); + const response = await deleteAgentUploadFile(esClient, id); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).toHaveBeenCalledTimes(1); + expect(response).toEqual({ id, deleted: true }); + }); + it('if no files needed to be deleted and metadata was updated normally', async () => { + esClient.deleteByQuery = jest.fn().mockResolvedValueOnce({ total: 0 }); + esClient.updateByQuery = jest.fn().mockResolvedValueOnce({ total: 1 }); + const response = await deleteAgentUploadFile(esClient, id); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).toHaveBeenCalledTimes(1); + expect(response).toEqual({ id, deleted: true }); + }); + }); + + describe('should throw an error', () => { + it('if data file deletion failed due to ES client error', async () => { + esClient.deleteByQuery = jest.fn().mockRejectedValueOnce(new Error('some es error')); + esClient.updateByQuery = jest.fn(); + await expect(deleteAgentUploadFile(esClient, id)).rejects.toThrow('some es error'); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).not.toHaveBeenCalled(); + }); + it('if data file deletion failed due to no files deleted', async () => { + esClient.deleteByQuery = jest.fn().mockResolvedValueOnce({ deleted: 0, total: 1 }); + esClient.updateByQuery = jest.fn(); + await expect(deleteAgentUploadFile(esClient, id)).rejects.toThrow( + `Failed to delete file ${id} from file storage data stream` + ); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).not.toHaveBeenCalled(); + }); + it('if metadata deletion failed due to ES client error', async () => { + esClient.deleteByQuery = jest.fn().mockResolvedValueOnce({ total: 0 }); + esClient.updateByQuery = jest.fn().mockRejectedValueOnce(new Error('some es error')); + await expect(deleteAgentUploadFile(esClient, id)).rejects.toThrow('some es error'); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).toHaveBeenCalledTimes(1); + }); + it('if metadata deletion failed due to no files deleted', async () => { + esClient.deleteByQuery = jest.fn().mockResolvedValueOnce({ total: 0 }); + esClient.updateByQuery = jest.fn().mockResolvedValueOnce({ total: 0 }); + await expect(deleteAgentUploadFile(esClient, id)).rejects.toThrow( + `Failed to update file ${id} metadata` + ); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.updateByQuery).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/agents/uploads.test_fixtures.ts b/x-pack/plugins/fleet/server/services/agents/uploads.test_fixtures.ts new file mode 100644 index 00000000000000..c749601d2af627 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agents/uploads.test_fixtures.ts @@ -0,0 +1,173 @@ +/* + * 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'; + +export const AGENT_ACTIONS_FIXTURES = [ + { + _source: { + action_id: 'current-in-progress-action', + '@timestamp': Moment().subtract('5', 'minute').toISOString(), + expiration: Moment().add(1, 'day').toISOString(), + }, + }, + { + _source: { + action_id: 'current-complete-action', + '@timestamp': Moment().subtract('5', 'minute').toISOString(), + expiration: Moment().add(1, 'day').toISOString(), + }, + }, + { + _source: { + action_id: 'expired-incomplete-action', + '@timestamp': Moment().subtract(6, 'hour').toISOString(), + expiration: Moment().subtract(3, 'hour').toISOString(), + }, + }, + { + _source: { + action_id: 'expired-complete-action', + '@timestamp': Moment().subtract(6, 'hour').toISOString(), + expiration: Moment().subtract(3, 'hour').toISOString(), + }, + }, + { + _source: { + action_id: 'current-error-action', + '@timestamp': Moment().subtract('5', 'minute').toISOString(), + expiration: Moment().add(1, 'day').toISOString(), + }, + }, + { + _source: { + action_id: 'expired-error-action', + '@timestamp': Moment().subtract(6, 'hour').toISOString(), + expiration: Moment().subtract(3, 'hour').toISOString(), + }, + }, + { + _source: { + action_id: 'current-deleted-action', + '@timestamp': Moment().subtract('5', 'minute').toISOString(), + expiration: Moment().add(1, 'day').toISOString(), + }, + }, + { + _source: { + action_id: 'expired-deleted-action', + '@timestamp': Moment().subtract(6, 'hour').toISOString(), + expiration: Moment().subtract(3, 'hour').toISOString(), + }, + }, + { + _source: { + action_id: 'old-incomplete-action', + '@timestamp': Moment().subtract(90, 'day').toISOString(), + expiration: Moment().subtract(89, 'day').toISOString(), + }, + }, + { + _source: { + action_id: 'old-complete-action', + '@timestamp': Moment().subtract(90, 'day').toISOString(), + expiration: Moment().subtract(89, 'day').toISOString(), + }, + }, +]; + +export const AGENT_ACTIONS_RESULTS_FIXTURES = [ + { + _source: { + action_id: 'current-in-progress-action', + }, + }, + { + _source: { + action_id: 'current-complete-action', + data: { upload_id: 'current-complete-file' }, + }, + }, + { + _source: { + action_id: 'expired-incomplete-action', + }, + }, + { + _source: { + action_id: 'expired-complete-action', + data: { upload_id: 'expired-complete-file' }, + }, + }, + { + _source: { + action_id: 'current-error-action', + error: 'some diagnostics err', + }, + }, + { + _source: { + action_id: 'expired-error-action', + error: 'some diagnostics err', + }, + }, + { + _source: { + action_id: 'current-deleted-action', + data: { upload_id: 'current-deleted-file' }, + }, + }, + { + _source: { + action_id: 'expired-deleted-action', + data: { upload_id: 'expired-deleted-file' }, + }, + }, + { + _source: { + action_id: 'old-incomplete-action', + }, + }, + { + _source: { + action_id: 'old-complete-action', + data: { upload_id: 'old-complete-file' }, + }, + }, +]; + +export const FILES_METADATA_BY_ACTION_ID: Record = { + 'current-complete-action': { + _id: 'current-complete-file', + _source: { + file: { name: 'current-complete-file.zip', Status: 'READY' }, + }, + }, + 'expired-complete-action': { + _id: 'expired-complete-file', + _source: { + file: { name: 'expired-complete-file.zip', Status: 'READY' }, + }, + }, + 'current-deleted-action': { + _id: 'current-complete-file', + _source: { + file: { name: 'current-complete-file.zip', Status: 'DELETED' }, + }, + }, + 'expired-deleted-action': { + _id: 'expired-complete-file', + _source: { + file: { name: 'expired-complete-file.zip', Status: 'DELETED' }, + }, + }, + 'old-complete-action': { + _id: 'old-complete-file', + _source: { + file: { name: 'old-complete-file.zip', Status: 'READY' }, + }, + }, +}; diff --git a/x-pack/plugins/fleet/server/services/agents/uploads.ts b/x-pack/plugins/fleet/server/services/agents/uploads.ts index bc2c52e4334739..27d0a52eeb3c7c 100644 --- a/x-pack/plugins/fleet/server/services/agents/uploads.ts +++ b/x-pack/plugins/fleet/server/services/agents/uploads.ts @@ -20,12 +20,14 @@ import { AGENT_ACTIONS_RESULTS_INDEX, agentRouteService, } from '../../../common'; - +import type { DeleteAgentUploadResponse } from '../../../common/types'; import { FILE_STORAGE_DATA_AGENT_INDEX, FILE_STORAGE_METADATA_AGENT_INDEX, SO_SEARCH_LIMIT, } from '../../constants'; +import { updateFilesStatus } from '../files'; +import { FleetError } from '../../errors'; export async function getAgentUploads( esClient: ElasticsearchClient, @@ -48,7 +50,7 @@ export async function getAgentUploads( if (fileResponse.hits.hits.length === 0) { appContextService .getLogger() - .debug(`No matches for action_id ${actionId} and agent_id ${agentId}`); + .trace(`No matches for action_id ${actionId} and agent_id ${agentId}`); return; } return { @@ -70,6 +72,19 @@ export async function getAgentUploads( const results: AgentDiagnostics[] = []; for (const action of actions) { const file = await getFile(action.actionId); + + // File list is initially built from list of diagnostic actions. + // If file was deleted intentially by ILM policy or user based on the meta information, + // or if the meta information does not exist AND the action is old (new actions are + // ok to show because we want to show in progress files) + // skip returning this action/file information. + if ( + file?.Status === 'DELETED' || + (!file && Date.parse(action.timestamp!) < Date.now() - 89 * 24 * 3600 * 1000) + ) { + continue; + } + const fileName = file?.name ?? `elastic-agent-diagnostics-${moment @@ -78,7 +93,7 @@ export async function getAgentUploads( const filePath = file ? agentRouteService.getAgentFileDownloadLink(file.id, file.name) : ''; const isActionExpired = action.expiration ? Date.parse(action.expiration) < Date.now() : false; const status = - file?.Status ?? (action.error ? 'FAILED' : isActionExpired ? 'EXPIRED' : 'IN_PROGRESS'); + file?.Status ?? (isActionExpired ? 'EXPIRED' : action.error ? 'FAILED' : 'IN_PROGRESS'); const result = { actionId: action.actionId, id: file?.id ?? action.actionId, @@ -216,6 +231,61 @@ export async function getAgentUploadFile( } } +export async function deleteAgentUploadFile( + esClient: ElasticsearchClient, + id: string +): Promise { + try { + // We manually delete the documents from the data streams with `_delete_by_query` + // because data streams do not support single deletes. See: + // https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html#data-streams-append-only + + // Delete the file from the file storage data stream + const filesDeleteResponse = await esClient.deleteByQuery({ + index: FILE_STORAGE_DATA_AGENT_INDEX, + refresh: true, + body: { + query: { + match: { + bid: id, // Use `bid` instead of `_id` because `_id` has additional suffixes + }, + }, + }, + }); + + if ( + !!( + (filesDeleteResponse.deleted && filesDeleteResponse.deleted > 0) || + filesDeleteResponse.total === 0 + ) + ) { + // Update the metadata to mark the file as deleted + const updateMetadataStatusResponse = ( + await updateFilesStatus( + esClient, + undefined, + { [FILE_STORAGE_METADATA_AGENT_INDEX]: new Set([id]) }, + 'DELETED' + ) + )[0]; + + if (updateMetadataStatusResponse.total === 0) { + throw new FleetError(`Failed to update file ${id} metadata`); + } + + return { + id, + deleted: true, + }; + } else { + throw new FleetError(`Failed to delete file ${id} from file storage data stream`); + } + } catch (error) { + appContextService.getLogger().error(error); + throw error; + } +} + export function getDownloadHeadersForFile(fileName: string): ResponseHeaders { return { 'content-type': 'application/octet-stream', diff --git a/x-pack/plugins/fleet/server/services/files/index.ts b/x-pack/plugins/fleet/server/services/files/index.ts index 48303c3611fc7d..203bc374b2bf19 100644 --- a/x-pack/plugins/fleet/server/services/files/index.ts +++ b/x-pack/plugins/fleet/server/services/files/index.ts @@ -147,7 +147,7 @@ export async function fileIdsWithoutChunksByIndex( */ export function updateFilesStatus( esClient: ElasticsearchClient, - abortController: AbortController, + abortController: AbortController | undefined, fileIdsByIndex: FileIdsByIndex, status: FileStatus ): Promise { @@ -168,7 +168,7 @@ export function updateFilesStatus( lang: 'painless', }, }, - { signal: abortController.signal } + abortController ? { signal: abortController.signal } : {} ) .catch((err) => { Error.captureStackTrace(err); diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts index 0ab7ece50f87fa..4bbd065e23003c 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts @@ -197,6 +197,12 @@ export const GetAgentUploadFileRequestSchema = { }), }; +export const DeleteAgentUploadFileRequestSchema = { + params: schema.object({ + fileId: schema.string(), + }), +}; + export const PostBulkAgentReassignRequestSchema = { body: schema.object({ policy_id: schema.string(), diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 04b9e05b489576..094c1f15bb5673 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -18595,7 +18595,6 @@ "xpack.fleet.fleetServerSetup.addFleetServerHostButton": "Ajouter un hôte", "xpack.fleet.fleetServerSetup.addFleetServerHostStepTitle": "Ajouter l'hôte de votre serveur Fleet", "xpack.fleet.fleetServerSetup.addFleetServerHostSuccessTitle": "Hôte du serveur Fleet ajouté", - "xpack.fleet.fleetServerSetup.calloutTitle": "Diagnostic de l'agent", "xpack.fleet.fleetServerSetup.cloudDeploymentLink": "Modifier le déploiement", "xpack.fleet.fleetServerSetup.cloudSetupTitle": "Activer un serveur Fleet", "xpack.fleet.fleetServerSetup.errorAddingFleetServerHostTitle": "Erreur lors de l'ajout de l'hôte du serveur Fleet", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index c6198a0e10efe8..7afc75d9766872 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -18572,7 +18572,6 @@ "xpack.fleet.fleetServerSetup.addFleetServerHostButton": "ホストの追加", "xpack.fleet.fleetServerSetup.addFleetServerHostStepTitle": "Fleetサーバーホストの追加", "xpack.fleet.fleetServerSetup.addFleetServerHostSuccessTitle": "追加されたFleetサーバーホスト", - "xpack.fleet.fleetServerSetup.calloutTitle": "エージェント診断", "xpack.fleet.fleetServerSetup.cloudDeploymentLink": "デプロイを編集", "xpack.fleet.fleetServerSetup.cloudSetupTitle": "Fleetサーバーを有効にする", "xpack.fleet.fleetServerSetup.errorAddingFleetServerHostTitle": "Fleetサーバーホストの追加エラー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 3d5c64342c7a89..95da09f4c580bf 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -18601,7 +18601,6 @@ "xpack.fleet.fleetServerSetup.addFleetServerHostButton": "添加主机", "xpack.fleet.fleetServerSetup.addFleetServerHostStepTitle": "添加您的 Fleet 服务器主机", "xpack.fleet.fleetServerSetup.addFleetServerHostSuccessTitle": "已添加 Fleet 服务器主机", - "xpack.fleet.fleetServerSetup.calloutTitle": "代理诊断", "xpack.fleet.fleetServerSetup.cloudDeploymentLink": "编辑部署", "xpack.fleet.fleetServerSetup.cloudSetupTitle": "启用 Fleet 服务器", "xpack.fleet.fleetServerSetup.errorAddingFleetServerHostTitle": "添加 Fleet 服务器主机时出错", diff --git a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts index 174d511674ef68..8ea34cc8c17de0 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - +import Moment from 'moment'; import expect from '@kbn/expect'; import { AGENT_ACTIONS_INDEX, AGENT_ACTIONS_RESULTS_INDEX } from '@kbn/fleet-plugin/common'; import { @@ -24,86 +24,143 @@ export default function (providerContext: FtrProviderContext) { const ES_INDEX_OPTIONS = { headers: { 'X-elastic-product-origin': 'fleet' } }; const cleanupFiles = async () => { - await esClient.deleteByQuery({ - index: `${FILE_STORAGE_DATA_AGENT_INDEX},${FILE_STORAGE_METADATA_AGENT_INDEX}`, - refresh: true, - ignore_unavailable: true, - query: { - bool: { - filter: [ - { - ids: { - values: ['file1', 'file1.0'], - }, - }, - ], + await esClient.deleteByQuery( + { + index: `${AGENT_ACTIONS_INDEX},${AGENT_ACTIONS_RESULTS_INDEX}`, + refresh: true, + ignore_unavailable: true, + query: { + prefix: { + action_id: 'fleet_uploads_test', + }, }, }, - }); - }; + ES_INDEX_OPTIONS + ); - describe('fleet_uploads', () => { - skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + await esClient.deleteByQuery( + { + index: `${FILE_STORAGE_DATA_AGENT_INDEX},${FILE_STORAGE_METADATA_AGENT_INDEX}`, + refresh: true, + ignore_unavailable: true, + query: { + match_all: {}, + }, + }, + ES_INDEX_OPTIONS + ); + }; - before(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); - await getService('supertest').post(`/api/fleet/setup`).set('kbn-xsrf', 'xxx').send(); - await cleanupFiles(); + const createUploadBundle = async ( + fileName: string, + opts: { + agentId: string; + expired?: boolean; + inProgress?: boolean; + error?: string; + timestamp: string; + } = { + agentId: 'agent1', + expired: false, + inProgress: false, + timestamp: Moment(Moment.now()).toISOString(), + } + ) => { + const expiration = opts.expired + ? Moment(opts.timestamp).subtract(6, 'hour') + : Moment(opts.timestamp).add(6, 'hour'); - await esClient.create({ + await esClient.index( + { index: AGENT_ACTIONS_INDEX, - id: new Date().toISOString(), refresh: true, + op_type: 'create', body: { type: 'REQUEST_DIAGNOSTICS', - action_id: 'action1', - agents: ['agent1'], - '@timestamp': '2022-10-07T11:00:00.000Z', + action_id: `fleet_uploads_test-${fileName}-action`, + agents: [opts.agentId], + '@timestamp': opts.timestamp, + expiration, }, - }); + }, + ES_INDEX_OPTIONS + ); - await esClient.create( - { - index: AGENT_ACTIONS_RESULTS_INDEX, - id: new Date().toISOString(), - refresh: true, - body: { - action_id: 'action1', - agent_id: 'agent1', - '@timestamp': '2022-10-07T12:00:00.000Z', - data: { - upload_id: 'file1', - }, + await esClient.index( + { + index: AGENT_ACTIONS_RESULTS_INDEX, + refresh: true, + op_type: 'create', + body: { + action_id: `fleet_uploads_test-${fileName}-action`, + agent_id: opts.agentId, + '@timestamp': opts.timestamp, + data: { + upload_id: fileName, }, + error: opts.error, }, - ES_INDEX_OPTIONS - ); + }, + ES_INDEX_OPTIONS + ); - await esClient.index({ + if (opts.error || opts.inProgress) { + return; + } + + await esClient.index( + { index: FILE_STORAGE_METADATA_AGENT_INDEX, - id: 'file1', + id: fileName, refresh: true, op_type: 'create', body: { - '@timestamp': new Date().toISOString(), - upload_id: 'file1', - action_id: 'action1', - agent_id: 'agent1', + '@timestamp': opts.timestamp, + upload_id: fileName, + action_id: `fleet_uploads_test-${fileName}-action`, + agent_id: opts.agentId, file: { ChunkSize: 4194304, extension: 'zip', hash: {}, mime_type: 'application/zip', mode: '0644', - name: 'elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip', - path: '/agent/elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip', + name: `elastic-agent-diagnostics-file-name.zip`, + path: `/agent/elastic-agent-diagnostics-file-name.zip`, size: 24917, Status: 'READY', type: 'file', }, }, - }); + }, + ES_INDEX_OPTIONS + ); + + await esClient.index( + { + index: FILE_STORAGE_DATA_AGENT_INDEX, + id: `${fileName}.0`, + op_type: 'create', + refresh: true, + body: { + '@timestamp': opts.timestamp, + last: true, + bid: fileName, + data: 'test', + }, + }, + ES_INDEX_OPTIONS + ); + }; + + describe('fleet_uploads', () => { + skipIfNoDockerRegistry(providerContext); + setupFleetAndAgents(providerContext); + + before(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await getService('supertest').post(`/api/fleet/setup`).set('kbn-xsrf', 'xxx').send(); + await cleanupFiles(); }); after(async () => { await Promise.all([ @@ -113,89 +170,136 @@ export default function (providerContext: FtrProviderContext) { }); it('should get agent uploads', async () => { - const { body } = await supertest - .get(`/api/fleet/agents/agent1/uploads`) + const fileName = 'file1'; + const agentId = 'agent1'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { agentId, timestamp }); + const { + body: { items }, + } = await supertest + .get(`/api/fleet/agents/${agentId}/uploads`) .set('kbn-xsrf', 'xxx') .expect(200); - expect(body.items[0]).to.eql({ - actionId: 'action1', - createTime: '2022-10-07T11:00:00.000Z', - filePath: - '/api/fleet/agents/files/file1/elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip', - id: 'file1', - name: 'elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip', + const { id, filePath, ...rest } = items[0]; + expect(filePath).to.be.a('string'); + expect(rest).to.eql({ + actionId: `fleet_uploads_test-${fileName}-action`, + createTime: timestamp, + name: `elastic-agent-diagnostics-file-name.zip`, status: 'READY', }); }); it('should get agent uploaded file', async () => { - await esClient.index({ - index: FILE_STORAGE_DATA_AGENT_INDEX, - id: 'file1.0', - op_type: 'create', - refresh: true, - body: { - '@timestamp': new Date().toISOString(), - last: true, - bid: 'file1', - data: 'test', - }, - }); - + const fileName = 'file2'; + const agentId = 'agent2'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { agentId, timestamp }); const { header } = await supertest - .get(`/api/fleet/agents/files/file1/elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip`) + .get(`/api/fleet/agents/files/${fileName}/elastic-agent-diagnostics-somefilename.zip`) .set('kbn-xsrf', 'xxx') .expect(200); expect(header['content-type']).to.eql('application/octet-stream'); expect(header['content-disposition']).to.eql( - 'attachment; filename="elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip"' + `attachment; filename="elastic-agent-diagnostics-somefilename.zip"` ); }); it('should return failed status with error message', async () => { - await esClient.create({ - index: AGENT_ACTIONS_INDEX, - id: new Date().toISOString(), - refresh: true, - body: { - type: 'REQUEST_DIAGNOSTICS', - action_id: 'action2', - agents: ['agent2'], - '@timestamp': '2022-10-07T11:00:00.000Z', - }, + const fileName = 'failed-file'; + const agentId = 'agent3'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { agentId, error: 'rate limit exceeded', timestamp }); + const { body } = await supertest + .get(`/api/fleet/agents/${agentId}/uploads`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + const { name, ...rest } = body.items[0]; + expect(name).to.be.a('string'); + expect(rest).to.eql({ + actionId: `fleet_uploads_test-${fileName}-action`, + createTime: timestamp, + filePath: '', + id: `fleet_uploads_test-${fileName}-action`, + status: 'FAILED', + error: 'rate limit exceeded', + }); + }); + + it('should return expired status', async () => { + const fileName = 'expired-failed'; + const agentId = 'agent4'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { + agentId, + expired: true, + error: 'rate limit exceeded', + timestamp, }); - await esClient.create( - { - index: AGENT_ACTIONS_RESULTS_INDEX, - id: new Date().toISOString(), - refresh: true, - body: { - action_id: 'action2', - agent_id: 'agent2', - '@timestamp': '2022-10-07T12:00:00.000Z', - data: {}, - error: 'rate limit exceeded', - }, - }, - ES_INDEX_OPTIONS - ); const { body } = await supertest - .get(`/api/fleet/agents/agent2/uploads`) + .get(`/api/fleet/agents/${agentId}/uploads`) .set('kbn-xsrf', 'xxx') .expect(200); - expect(body.items[0]).to.eql({ - actionId: 'action2', - createTime: '2022-10-07T11:00:00.000Z', + const { name, ...rest } = body.items[0]; + expect(name).to.be.a('string'); + expect(rest).to.eql({ + actionId: `fleet_uploads_test-${fileName}-action`, + createTime: timestamp, filePath: '', - id: 'action2', - name: 'elastic-agent-diagnostics-2022-10-07T11-00-00Z-00.zip', - status: 'FAILED', + id: `fleet_uploads_test-${fileName}-action`, + status: 'EXPIRED', error: 'rate limit exceeded', }); }); + + it('should return in progress status', async () => { + const fileName = 'in-progress-file'; + const agentId = 'agent6'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { agentId, inProgress: true, timestamp }); + const { + body: { items }, + } = await supertest + .get(`/api/fleet/agents/${agentId}/uploads`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + const { id, name, ...rest } = items[0]; + expect(id).to.be.a('string'); + expect(name).to.be.a('string'); + expect(rest).to.eql({ + actionId: `fleet_uploads_test-${fileName}-action`, + createTime: timestamp, + filePath: '', + status: 'IN_PROGRESS', + }); + }); + + it('should delete agent uploaded file', async () => { + const fileName = 'to-delete-file'; + const agentId = 'agent7'; + const timestamp = Moment().toISOString(); + await createUploadBundle(fileName, { agentId, timestamp }); + + const { body } = await supertest + .delete(`/api/fleet/agents/files/${fileName}`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + expect(body.deleted).to.eql(true); + }); + + it('should return error if file is not found for deletion', async () => { + const fileName = 'unknown-file'; + await supertest + .delete(`/api/fleet/agents/files/${fileName}`) + .set('kbn-xsrf', 'xxx') + .expect(400); + }); }); } From 07feb6e35dc4354a7ac1b657860a005dd252f8cd Mon Sep 17 00:00:00 2001 From: Joe McElroy Date: Mon, 20 May 2024 19:42:10 +0100 Subject: [PATCH 34/97] [Search] [Playground] Fix Selecting Index via URLParams (#183843) ## Summary On testing BC5, we found an issue: We have a feature where you can open playground from the index view page. The issue is that on selecting the index, the esQuery hasn't been generated which is required every time the index has been changed. This fix uses the hook to update the sources which in turns updates the query and default fields. Tested on both ESS and ES3. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../components/playground/playground.tsx | 12 +- .../public/chat_playground_overview.tsx | 6 +- .../sources_panel_for_start_chat.tsx | 2 +- .../public/components/start_new_chat.test.tsx | 123 ++++++++++++++++++ .../public/components/start_new_chat.tsx | 20 ++- .../public/providers/playground_provider.tsx | 6 +- 6 files changed, 145 insertions(+), 24 deletions(-) create mode 100644 x-pack/plugins/search_playground/public/components/start_new_chat.test.tsx diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx index 8667c9641a704b..e6882acb0ac3b6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx @@ -7,8 +7,6 @@ import React from 'react'; -import { useSearchParams } from 'react-router-dom-v5-compat'; - import { useValues } from 'kea'; import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; @@ -20,21 +18,13 @@ import { KibanaLogic } from '../../../shared/kibana'; import { EnterpriseSearchApplicationsPageTemplate } from '../layout/page_template'; export const Playground: React.FC = () => { - const [searchParams] = useSearchParams(); - const index: string | null = searchParams.has('default-index') - ? searchParams.get('default-index') - : null; const { searchPlayground } = useValues(KibanaLogic); if (!searchPlayground) { return null; } return ( - + { ); return ( - + { defaultMessage: "Select the Elasticsearch indices you'd like to query, providing additional context for the LLM.", })} - isValid={!!selectedIndices.length} + isValid={!!selectedIndices?.length} dataTestSubj="selectIndicesChatPanel" > {!!selectedIndices?.length && ( diff --git a/x-pack/plugins/search_playground/public/components/start_new_chat.test.tsx b/x-pack/plugins/search_playground/public/components/start_new_chat.test.tsx new file mode 100644 index 00000000000000..ed380e00eb1daf --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/start_new_chat.test.tsx @@ -0,0 +1,123 @@ +/* + * 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 { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { MemoryRouter, useSearchParams } from 'react-router-dom-v5-compat'; +import { StartNewChat } from './start_new_chat'; +import { useLoadConnectors } from '../hooks/use_load_connectors'; +import { useUsageTracker } from '../hooks/use_usage_tracker'; +import { AnalyticsEvents } from '../analytics/constants'; +import { useSourceIndicesFields } from '../hooks/use_source_indices_field'; +import { useKibana } from '../hooks/use_kibana'; +import { PlaygroundProvider } from '../providers/playground_provider'; + +jest.mock('../hooks/use_load_connectors'); +jest.mock('../hooks/use_usage_tracker'); +jest.mock('../hooks/use_source_indices_field', () => ({ + useSourceIndicesFields: jest.fn(() => ({ addIndex: jest.fn() })), +})); +jest.mock('react-router-dom-v5-compat', () => ({ + ...jest.requireActual('react-router-dom-v5-compat'), + useSearchParams: jest.fn(), +})); +jest.mock('../hooks/use_kibana'); + +const mockUseLoadConnectors = useLoadConnectors as jest.Mock; +const mockUseUsageTracker = useUsageTracker as jest.Mock; +const mockUseSearchParams = useSearchParams as jest.Mock; + +const renderWithForm = (ui: React.ReactElement) => { + const Wrapper: React.FC = ({ children }) => { + return ( + + {children} + + ); + }; + return render(ui, { wrapper: Wrapper }); +}; + +const mockConnectors = { + '1': { title: 'Connector 1' }, + '2': { title: 'Connector 2' }, +}; + +describe('StartNewChat', () => { + beforeEach(() => { + mockUseLoadConnectors.mockReturnValue({ data: [] }); + mockUseUsageTracker.mockReturnValue({ load: jest.fn() }); + mockUseSearchParams.mockReturnValue([new URLSearchParams()]); + + (useKibana as jest.Mock).mockReturnValue({ + services: { + triggersActionsUi: { + getAddConnectorFlyout: () => ( +

Add Connector Flyout
+ ), + }, + }, + }); + (useLoadConnectors as jest.Mock).mockReturnValue({ + data: mockConnectors, + refetch: jest.fn(), + isLoading: false, + isSuccess: true, + }); + }); + + it('renders correctly', () => { + renderWithForm( + + + + ); + + expect(screen.getByTestId('startNewChatTitle')).toBeInTheDocument(); + }); + + it('disables the start button when form conditions are not met', () => { + renderWithForm( + + + + ); + + const startButton = screen.getByTestId('startChatButton'); + expect(startButton).toBeDisabled(); + }); + + it('tracks the page load event', () => { + const usageTracker = { load: jest.fn() }; + mockUseUsageTracker.mockReturnValue(usageTracker); + + renderWithForm( + + + + ); + + expect(usageTracker.load).toHaveBeenCalledWith(AnalyticsEvents.startNewChatPageLoaded); + }); + + it('calls addIndex when default-index is present in searchParams', () => { + const addIndex = jest.fn(); + (useSourceIndicesFields as jest.Mock).mockReturnValue({ addIndex }); + const searchParams = new URLSearchParams({ 'default-index': 'test-index' }); + mockUseSearchParams.mockReturnValue([searchParams]); + + renderWithForm( + + + + ); + + expect(addIndex).toHaveBeenCalledWith('test-index'); + }); +}); diff --git a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx index 46d3896e9e953c..3dccacbf9e1fad 100644 --- a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx +++ b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx @@ -15,14 +15,16 @@ import { useEuiTheme, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useEffect } from 'react'; +import React, { useEffect, useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; +import { useSearchParams } from 'react-router-dom-v5-compat'; import { useUsageTracker } from '../hooks/use_usage_tracker'; import { useLoadConnectors } from '../hooks/use_load_connectors'; import { SourcesPanelForStartChat } from './sources_panel/sources_panel_for_start_chat'; import { SetUpConnectorPanelForStartChat } from './set_up_connector_panel_for_start_chat'; import { ChatFormFields } from '../types'; import { AnalyticsEvents } from '../analytics/constants'; +import { useSourceIndicesFields } from '../hooks/use_source_indices_field'; const maxWidthPage = 640; @@ -36,6 +38,17 @@ export const StartNewChat: React.FC = ({ onStartClick }) => { const { watch } = useFormContext(); const usageTracker = useUsageTracker(); + const [searchParams] = useSearchParams(); + const index = useMemo(() => searchParams.get('default-index'), [searchParams]); + const { addIndex } = useSourceIndicesFields(); + + useEffect(() => { + if (index) { + addIndex(index); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [index]); + useEffect(() => { usageTracker?.load(AnalyticsEvents.startNewChatPageLoaded); }, [usageTracker]); @@ -55,7 +68,7 @@ export const StartNewChat: React.FC = ({ onStartClick }) => { -

+

= ({ onStartClick }) => { fill iconType="arrowRight" iconSide="right" + data-test-subj="startChatButton" disabled={ - !watch(ChatFormFields.indices, []).length || + !watch(ChatFormFields.indices, [])?.length || !Object.keys(connectors || {}).length || !watch(ChatFormFields.elasticsearchQuery, '') } diff --git a/x-pack/plugins/search_playground/public/providers/playground_provider.tsx b/x-pack/plugins/search_playground/public/providers/playground_provider.tsx index 301bbfe89b2e47..562658b4b8bd58 100644 --- a/x-pack/plugins/search_playground/public/providers/playground_provider.tsx +++ b/x-pack/plugins/search_playground/public/providers/playground_provider.tsx @@ -8,25 +8,23 @@ import React, { FC, PropsWithChildren } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { FormProvider, useForm } from 'react-hook-form'; -import { ChatForm, ChatFormFields } from '../types'; +import { ChatForm } from '../types'; const queryClient = new QueryClient({}); export interface PlaygroundProviderProps { children: React.ReactNode; - defaultValues?: Partial>; } export const PlaygroundProvider: FC> = ({ children, - defaultValues, }) => { const form = useForm({ defaultValues: { prompt: 'You are an assistant for question-answering tasks.', doc_size: 3, source_fields: {}, - indices: defaultValues?.indices || [], + indices: [], }, }); From 8cb8306000c8a3056498eea3115eb19c38c4ec88 Mon Sep 17 00:00:00 2001 From: Brad White Date: Mon, 20 May 2024 12:47:25 -0600 Subject: [PATCH 35/97] [CI / FIPS] Adjust FIPS daily pipeline alerts, start time (#183855) ## Summary The FIPS pipeline may be failing for quite awhile for issues to get fixed and as the project ramps up. For now divert the alerts to a new Slack channel. Also adjusted the start time so that it completes earlier in the day. --- .../pipeline-resource-definitions/kibana-fips-daily.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline-resource-definitions/kibana-fips-daily.yml b/.buildkite/pipeline-resource-definitions/kibana-fips-daily.yml index 32f78b24e8d239..6679e3006bb005 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-fips-daily.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-fips-daily.yml @@ -19,7 +19,7 @@ spec: description: Run Kibana FIPS smoke tests spec: env: - SLACK_NOTIFICATIONS_CHANNEL: "#kibana-operations-alerts" + SLACK_NOTIFICATIONS_CHANNEL: "#kibana-fips-ftr-errors" ELASTIC_SLACK_NOTIFICATIONS_ENABLED: "true" repository: elastic/kibana branch_configuration: main @@ -30,7 +30,7 @@ spec: schedules: daily: branch: main - cronline: 0 9 * * * America/New_York + cronline: 0 5 * * * America/New_York teams: kibana-operations: access_level: MANAGE_BUILD_AND_READ From 21a30f3eecbe672a3230f76a4deb620d368ff814 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 20 May 2024 20:00:47 +0100 Subject: [PATCH 36/97] fix(NA): removes props duplication --- .../search_playground/public/components/start_new_chat.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx index 3dccacbf9e1fad..0df4485ec858cf 100644 --- a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx +++ b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx @@ -110,7 +110,6 @@ export const StartNewChat: React.FC = ({ onStartClick }) => { !watch(ChatFormFields.elasticsearchQuery, '') } onClick={onStartClick} - data-test-subj="startChatButton" > Date: Mon, 20 May 2024 20:03:17 +0100 Subject: [PATCH 37/97] skip flaky suite (#183847) --- test/functional/apps/discover/group4/_esql_view.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/discover/group4/_esql_view.ts b/test/functional/apps/discover/group4/_esql_view.ts index 17c2e9542d7745..a5a626b8fe7717 100644 --- a/test/functional/apps/discover/group4/_esql_view.ts +++ b/test/functional/apps/discover/group4/_esql_view.ts @@ -257,7 +257,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('inspector', () => { + // FLAKY: https://github.com/elastic/kibana/issues/183847 + describe.skip('inspector', () => { beforeEach(async () => { await PageObjects.common.navigateToApp('discover'); await PageObjects.timePicker.setDefaultAbsoluteRange(); From 3a23efe9264deeac2f37e5c8f20730930bfecce1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 12:45:42 -0700 Subject: [PATCH 38/97] Update dependency elastic-apm-node to ^4.5.4 (main) (#183854) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index d91a1752ead8e6..e747cf96a7feae 100644 --- a/package.json +++ b/package.json @@ -998,7 +998,7 @@ "deepmerge": "^4.2.2", "del": "^6.1.0", "diff": "^5.1.0", - "elastic-apm-node": "^4.5.3", + "elastic-apm-node": "^4.5.4", "email-addresses": "^5.0.0", "eventsource-parser": "^1.1.1", "execa": "^5.1.1", diff --git a/yarn.lock b/yarn.lock index b32d917f64ce64..c0bec897b08f77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11437,6 +11437,11 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -15940,10 +15945,10 @@ elastic-apm-node@3.46.0: traverse "^0.6.6" unicode-byte-truncate "^1.0.0" -elastic-apm-node@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.5.3.tgz#8015f1525f6cd45daef6a48a88d93dbaf5899212" - integrity sha512-FE+srHVTtvDp/SfY76yxSIupCU8Z30WuOx1Yf3plUXeyLuKqq9YRk6uX0Jleb1jfwG58lvabpeU0u9YmS1YdrA== +elastic-apm-node@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.5.4.tgz#add7c5a53f8a4ec29989e3365c9f2053ec64a20d" + integrity sha512-PqX8a5PdWo+mtH1Vn+xjmhJpa2RE9zbKDKFkKoENKG118KVgukxhFlVIpb3qrht9aeRkPxHqQsPNtNV3ljPjew== dependencies: "@elastic/ecs-pino-format" "^1.5.0" "@opentelemetry/api" "^1.4.1" @@ -15963,7 +15968,7 @@ elastic-apm-node@^4.5.3: fast-safe-stringify "^2.0.7" fast-stream-to-buffer "^1.0.0" http-headers "^3.0.2" - import-in-the-middle "1.7.3" + import-in-the-middle "1.7.4" json-bigint "^1.0.0" lru-cache "^10.0.1" measured-reporting "^1.51.1" @@ -19269,13 +19274,13 @@ import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-in-the-middle@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.7.3.tgz#ffa784cdd57a47d2b68d2e7dd33070ff06baee43" - integrity sha512-R2I11NRi0lI3jD2+qjqyVlVEahsejw7LDnYEbGb47QEFjczE3bZYsmWheCTQA+LFs2DzOQxR7Pms7naHW1V4bQ== +import-in-the-middle@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.7.4.tgz#508da6e91cfa84f210dcdb6c0a91ab0c9e8b3ebc" + integrity sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg== dependencies: acorn "^8.8.2" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" cjs-module-lexer "^1.2.2" module-details-from-path "^1.0.3" From 105baf482423826863c8577fcb7c28f9a4faa199 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Mon, 20 May 2024 13:29:10 -0700 Subject: [PATCH 39/97] [Reporting] Download report: add debug logging around sending of 5xx codes (#183852) ## Summary These logs help correlate errors one may see from investigating HTTP 5xx status codes that are sent in response to the Download Report API. Related to: https://github.com/elastic/kibana/issues/183846 --- .../server/routes/common/jobs/get_document_payload.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/reporting/server/routes/common/jobs/get_document_payload.ts b/x-pack/plugins/reporting/server/routes/common/jobs/get_document_payload.ts index d8a0027c42d644..c77e04ec66c22e 100644 --- a/x-pack/plugins/reporting/server/routes/common/jobs/get_document_payload.ts +++ b/x-pack/plugins/reporting/server/routes/common/jobs/get_document_payload.ts @@ -54,6 +54,8 @@ const getReportingHeaders = (output: TaskRunResult, exportType: ExportType) => { }; export function getDocumentPayloadFactory(reporting: ReportingCore) { + const { logger: _logger } = reporting.getPluginSetupDeps(); + const logger = _logger.get('download-report'); const exportTypesRegistry = reporting.getExportTypesRegistry(); async function getCompleted({ @@ -88,6 +90,8 @@ export function getDocumentPayloadFactory(reporting: ReportingCore) { const jobsQuery = jobsQueryFactory(reporting); const error = await jobsQuery.getError(id); + logger.debug(`Report job ${id} has failed. Sending statusCode: 500`); + return { statusCode: 500, content: { @@ -98,7 +102,9 @@ export function getDocumentPayloadFactory(reporting: ReportingCore) { }; } - function getIncomplete({ status }: ReportApiJSON): Payload { + function getIncomplete({ id, status }: ReportApiJSON): Payload { + logger.debug(`Report job ${id} is processing. Sending statusCode: 503`); + return { statusCode: 503, content: status, From 53bdba31a0cbf34a42fae0fff15ab4c699a64a39 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 20 May 2024 23:46:01 +0300 Subject: [PATCH 40/97] fix: [Obs SLOs][KEYBOARD]: Actions menu must be available in Card view on ::focus event (#183652) Closes: https://github.com/elastic/observability-dev/issues/3390 ## Description The Obs SLOs cards allow users to access a menu of actions on `::hover` but that menu is not available on `::focus`. This has a workaround by switching to List or Compact view, but still represents a major keyboard usability issue and is going to be treated as a level one defect. Screenshot attached below. ### Steps to recreate 1. Open the [Obs SLOs](https://issue-serverless-alpbx-pr180406-c06b1b.kb.eu-west-1.aws.qa.elastic.cloud/app/slos) view 2. Create a new SLO if none exist 3. Hover over the newly created SLO card and verify the `[ ... ]` menu appears 4. Now press the `Tab` key to navigate through the card by keyboard 5. Verify the `[ ... ]` menu never appears ### What was changed?: 1 The hover functionality was updated in favor of CSS # Screen https://github.com/elastic/kibana/assets/20072247/e22c4e45-7eab-403e-974c-8fbf789cc498 --- .../components/card_view/slo_card_item.tsx | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx index ebdc068435a766..0808298b24a8b5 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/card_view/slo_card_item.tsx @@ -74,7 +74,6 @@ const getFirstGroupBy = (slo: SLOWithSummaryResponse) => { export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, refetchRules }: Props) { const containerRef = React.useRef(null); - const [isMouseOver, setIsMouseOver] = useState(false); const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false); const [isAddRuleFlyoutOpen, setIsAddRuleFlyoutOpen] = useState(false); const [isEditRuleFlyoutOpen, setIsEditRuleFlyoutOpen] = useState(false); @@ -110,21 +109,25 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, refet } - onMouseOver={() => { - if (!isMouseOver) { - setIsMouseOver(true); - } - }} - onMouseLeave={() => { - if (isMouseOver) { - setIsMouseOver(false); - } - }} paddingSize="none" css={css` height: 182px; overflow: hidden; position: relative; + + & .sloCardItemActions_hover { + pointer-events: none; + opacity: 0; + + &:focus-within { + pointer-events: auto; + opacity: 1; + } + } + &:hover .sloCardItemActions_hover { + pointer-events: auto; + opacity: 1; + } `} title={ slo.summary.summaryUpdatedAt @@ -151,7 +154,7 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, refet /> } /> - {(isMouseOver || isActionsPopoverOpen) && ( +
- )} +
Date: Mon, 20 May 2024 16:49:33 -0600 Subject: [PATCH 41/97] [Security Assistant] Automatically Install Knowledge Base (#182763) ## Summary This PR is `Phase 1` of the Knowledge Base work for `8.15`, which includes [automatically setting up the Knowledge base](https://github.com/elastic/security-team/issues/9305) (this PR), introducing new generic KB tools for recall/retrieval, a CRUD API for for managing Knowledge Base Entries, and a basic UI for Knowledge Base Entry management (all captured in [this issue](url)). Once complete, this will also provide the opportunity to remove the `!isEnabledKnowledgeBase` code paths, directing all interactions through our LangChain Agent pipeline. This PR sets the ground work for all of the above by moving ELSER setup and Knowledge Base data management to use the new `AssistantDataClient` architecture used for Conversations, AnonymizationFields and Prompts. This feature is currently behind the `assistantKnowledgeBaseByDefault` experimental feature flag, which can be enabled by adding the following to your `kibana.dev.yml`: ``` xpack.securitySolution.enableExperimental: - 'assistantKnowledgeBaseByDefault' ``` Once enabled, an `Install Knowledge Base` button will be shown when starting a new conversation. Note: UX is still under development.

#### Useful Dev Tools Queries The new `assistantKnowledgeBaseByDefault` flows are quite resilient, and so everything should function as expected even if one piece of the puzzle is missing or incomplete. Here are some dev tool queries to check and delete individual resources, which is nice for testing. For instance, you can nuke the ingest pipeline, or ELSER, and the `Install KB` button will appear and function as intended. > [!NOTE] > Since the existing API's were used, with forked logic for the `assistantKnowledgeBaseByDefault` FF, the existing KB Settings UI still functions as expected, and can be used for deleting and re-initializing the KB. This functionality will most likely go away with updates to the KB UI, but is nice for testing in the interim.
Useful Dev Tools Queries

``` ts // New KB GET /_ingest/pipeline/.kibana-elastic-ai-assistant-ingest-pipeline-knowledge-base GET /_index_template/.kibana-elastic-ai-assistant-index-template-knowledge-base GET /_data_stream/.kibana-elastic-ai-assistant-knowledge-base-default/ GET .kibana-elastic-ai-assistant-knowledge-base-default/_count GET .kibana-elastic-ai-assistant-knowledge-base-default/_mapping GET .kibana-elastic-ai-assistant-knowledge-base-default/_search { "size": 1000 } // MSearch for if ES|QLKB docs exists GET .kibana-elastic-ai-assistant-knowledge-base-default/_msearch {} {"query":{"bool":{"must_not":[{"term":{"metadata.kbResource":"esql"}},{"term":{"metadata.required":true}}],"must":[{"text_expansion":{"vector.tokens":{"model_id":".elser_model_2","model_text":"You can chain processing commands, separated by a pipe character: `|`."}}}]}},"size":10} {} {"query":{"bool":{"must":[{"term":{"metadata.kbResource":"esql"}},{"term":{"metadata.required":true}}]}},"size":10000} // Other DataClient Assets GET .kibana-elastic-ai-assistant-anonymization-fields-default/_search { "size": 1000 } GET .kibana-elastic-ai-assistant-conversations-default/_search { "size": 1000 } GET .kibana-elastic-ai-assistant-prompts-default/_search { "size": 1000 } GET /_ingest/pipeline/.kibana-elastic-ai-assistant-ingest-pipeline-knowledge-base // Delete them all! // Data Streams DELETE /_data_stream/.kibana-elastic-ai-assistant-anonymization-fields-default DELETE /_data_stream/.kibana-elastic-ai-assistant-conversations-default DELETE /_data_stream/.kibana-elastic-ai-assistant-knowledge-base-default DELETE /_data_stream/.kibana-elastic-ai-assistant-prompts-default // Index Templates DELETE /_index_template/.kibana-elastic-ai-assistant-index-template-anonymization-fields DELETE /_index_template/.kibana-elastic-ai-assistant-index-template-conversations DELETE /_index_template/.kibana-elastic-ai-assistant-index-template-knowledge-base DELETE /_index_template/.kibana-elastic-ai-assistant-index-template-prompts // Pipelines DELETE /_ingest/pipeline/.kibana-elastic-ai-assistant-ingest-pipeline-knowledge-base ```

##### New Features: - [X] Plumbed through new `assistantKnowledgeBaseByDefault` experimental feature flag and exposed through `assistantCapabilities` API - [X] Cleaned up `assistantFeatures` made available in AssistantProvider and tests (no need to individually plumb new features) - [X] Introduced new `AIAssistantDataClient` for creating Data Streams, Component Templates, and Ingest Pipeline - [X] Use `AIAssistantDataClient` to automatically install ELSER via `installElasticModel()` API, then deploy via TrainedModelsAPI - [X] Plumb through `addKnowledgeBaseDocuments()` for creating KB entries from LangChain `Documents` within `AIAssistantDataClient` - [X] Update `ElasticsearchStore` to take a `kbDataClient` for use in document adding/retrieval ##### Changes not behind FF: - [X] Updated `getELSER()` helper function to be called by `internalUser` to prevent ml privilege requirements to setup Knowledge Base once a privileged user has enabled ELSER - [X] Updated `get/post/delete` knowledge base routes to create `esStore` as `internalUser` to enable all assistant users the ability to enable the KB once ELSER has been installed (currently they `503` if currentUser doesn't have `read_ingest` and `manage`/`read` for the `.kibana-elastic-ai-assistant-kb index`) - [X] Updated `get/post/delete` knowledge base routes with assistant API access controls: `tags: ['access:elasticAssistant'],` - [X] Relaxed id validation from UUID to UUID or NonEmptyString to support ES generated id's, see: [ddf93a8](https://github.com/elastic/kibana/pull/182763/commits/ddf93a8dd1629121964a474f37b7251663519f72) ### Checklist Delete any items that are not applicable to this PR. - [X] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - TBD once FF is removed - [ ] [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 - Existing tests updated with new functionality, new tests to be fleshed out as feature stabilizes before removing FF --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../kbn-elastic-assistant-common/constants.ts | 6 + .../impl/capabilities/index.ts | 1 + ...ost_actions_connector_execute_route.gen.ts | 5 +- ...ctions_connector_execute_route.schema.yaml | 2 +- ...ulk_crud_anonymization_fields_route.gen.ts | 4 +- ...rud_anonymization_fields_route.schema.yaml | 5 +- .../get_capabilities_route.gen.ts | 1 + .../get_capabilities_route.schema.yaml | 3 + .../impl/schemas/common_attributes.gen.ts | 47 ++++ .../schemas/common_attributes.schema.yaml | 30 ++ .../conversations/common_attributes.gen.ts | 36 +-- .../common_attributes.schema.yaml | 39 +-- .../crud_conversation_route.gen.ts | 10 +- .../crud_conversation_route.schema.yaml | 14 +- .../impl/schemas/index.ts | 8 +- .../bulk_crud_knowledge_base_route.gen.ts | 117 ++++++++ ...bulk_crud_knowledge_base_route.schema.yaml | 175 ++++++++++++ .../knowledge_base/common_attributes.gen.ts | 119 ++++++++ .../common_attributes.schema.yaml | 124 ++++++++ .../knowledge_base/crud_kb_route.gen.ts | 2 + .../knowledge_base/crud_kb_route.schema.yaml | 4 + .../crud_knowledge_base_route.gen.ts | 91 ++++++ .../crud_knowledge_base_route.schema.yaml | 122 ++++++++ .../prompts/bulk_crud_prompts_route.gen.ts | 4 +- .../bulk_crud_prompts_route.schema.yaml | 7 +- .../use_fetch_anonymization_fields.test.tsx | 5 +- .../__mocks__/use_capabilities.tsx | 17 ++ .../capabilities/use_capabilities.test.tsx | 9 +- ..._fetch_current_user_conversations.test.tsx | 5 +- .../impl/assistant/api/index.tsx | 74 ++--- .../impl/assistant/index.tsx | 4 + .../settings/assistant_settings.test.tsx | 2 +- .../assistant/settings/assistant_settings.tsx | 2 +- .../assistant_settings_management.tsx | 2 +- .../impl/assistant_context/index.tsx | 12 +- .../install_knowledge_base_button.tsx | 64 +++++ .../knowledge_base_settings.test.tsx | 2 + .../knowledge_base_settings.tsx | 36 ++- .../use_knowledge_base_status.tsx | 13 +- .../packages/kbn-elastic-assistant/index.ts | 7 - .../elastic_assistant/common/constants.ts | 3 - .../server/__mocks__/request.ts | 9 +- .../server/__mocks__/request_context.ts | 15 +- .../conversations/index.test.ts | 2 +- .../ai_assistant_data_clients/index.test.ts | 2 +- .../server/ai_assistant_data_clients/index.ts | 4 +- .../create_knowledge_base_entry.ts | 83 ++++++ .../field_maps_configuration.ts | 90 ++++++ .../get_knowledge_base_entry.ts | 78 ++++++ .../knowledge_base/helpers.ts | 16 ++ .../knowledge_base/index.ts | 264 ++++++++++++++++++ .../knowledge_base/ingest_pipeline.ts | 36 +++ .../knowledge_base/transforms.ts | 96 +++++++ .../knowledge_base/types.ts | 54 ++++ .../server/ai_assistant_service/helpers.ts | 111 ++++++++ .../server/ai_assistant_service/index.test.ts | 151 +++------- .../server/ai_assistant_service/index.ts | 132 ++++++++- .../lib/data_stream/documents_data_writer.ts | 4 +- .../elasticsearch_store.ts | 67 ++++- .../execute_custom_llm_chain/index.test.ts | 15 +- .../execute_custom_llm_chain/index.ts | 16 +- .../executors/openai_functions_executor.ts | 16 +- .../server/lib/langchain/executors/types.ts | 6 +- .../elastic_assistant/server/plugin.ts | 6 +- .../routes/evaluate/post_evaluate.test.ts | 4 +- .../server/routes/evaluate/post_evaluate.ts | 30 +- .../delete_knowledge_base.test.ts | 2 +- .../knowledge_base/delete_knowledge_base.ts | 49 +++- .../knowledge_base/entries/create_route.ts | 76 +++++ .../get_knowledge_base_status.test.ts | 11 +- .../get_knowledge_base_status.ts | 48 +++- .../post_knowledge_base.test.ts | 11 +- .../knowledge_base/post_knowledge_base.ts | 57 +++- .../post_actions_connector_execute.test.ts | 2 + .../routes/post_actions_connector_execute.ts | 30 +- .../server/routes/register_routes.ts | 17 +- .../server/routes/request_context_factory.ts | 12 + .../server/services/app_context.test.ts | 5 + .../plugins/elastic_assistant/server/types.ts | 20 +- .../plugins/elastic_assistant/tsconfig.json | 3 +- .../common/experimental_features.ts | 5 + .../security_solution/server/plugin.ts | 1 + 82 files changed, 2438 insertions(+), 451 deletions(-) create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/__mocks__/use_capabilities.tsx create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/install_knowledge_base_button.tsx create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts create mode 100644 x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts diff --git a/x-pack/packages/kbn-elastic-assistant-common/constants.ts b/x-pack/packages/kbn-elastic-assistant-common/constants.ts index 67a20011dffd94..bc8f4e3ab9db35 100755 --- a/x-pack/packages/kbn-elastic-assistant-common/constants.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/constants.ts @@ -8,6 +8,7 @@ export const ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION = '1'; export const ELASTIC_AI_ASSISTANT_URL = '/api/elastic_assistant'; +export const ELASTIC_AI_ASSISTANT_INTERNAL_URL = '/internal/elastic_assistant'; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL = `${ELASTIC_AI_ASSISTANT_URL}/current_user/conversations`; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID = `${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/{id}`; @@ -23,3 +24,8 @@ export const ELASTIC_AI_ASSISTANT_PROMPTS_URL_FIND = `${ELASTIC_AI_ASSISTANT_PRO export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL = `${ELASTIC_AI_ASSISTANT_URL}/anonymization_fields`; export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION = `${ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL}/_bulk_action`; export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_FIND = `${ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL}/_find`; + +// TODO: Update existing 'status' endpoint to take resource as query param as to not conflict with 'entries' +export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL = `${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/knowledge_base/{resource?}`; +export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL = `${ELASTIC_AI_ASSISTANT_URL}/knowledge_base/entries`; +export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_BULK_ACTION = `${ELASTIC_AI_ASSISTANT_URL}/knowledge_base/_bulk_action`; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts index 2a6cce1adbdbbc..9c734cc4b3c133 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts @@ -14,5 +14,6 @@ export type AssistantFeatures = { [K in keyof typeof defaultAssistantFeatures]: * Default features available to the elastic assistant */ export const defaultAssistantFeatures = Object.freeze({ + assistantKnowledgeBaseByDefault: false, assistantModelEvaluation: false, }); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts index be9ed538cda7fb..1b855650ddcfc1 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts @@ -16,7 +16,8 @@ import { z } from 'zod'; * version: 1 */ -import { UUID, Replacements } from '../conversations/common_attributes.gen'; +import { NonEmptyString } from '../common_attributes.gen'; +import { Replacements } from '../conversations/common_attributes.gen'; export type ExecuteConnectorRequestParams = z.infer; export const ExecuteConnectorRequestParams = z.object({ @@ -29,7 +30,7 @@ export type ExecuteConnectorRequestParamsInput = z.input; export const ExecuteConnectorRequestBody = z.object({ - conversationId: UUID.optional(), + conversationId: NonEmptyString.optional(), message: z.string().optional(), model: z.string().optional(), subAction: z.enum(['invokeAI', 'invokeStream']), diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml index d8bb1396746ed0..9ea3c4107c7d15 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml @@ -31,7 +31,7 @@ paths: - subAction properties: conversationId: - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' message: type: string model: diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts index bc2cb93bb30c30..d25c0198aaa1ad 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts @@ -16,7 +16,7 @@ import { z } from 'zod'; * version: 2023-10-31 */ -import { UUID, NonEmptyString } from '../conversations/common_attributes.gen'; +import { NonEmptyString } from '../common_attributes.gen'; export type BulkActionSkipReason = z.infer; export const BulkActionSkipReason = z.literal('ANONYMIZATION_FIELD_NOT_MODIFIED'); @@ -44,7 +44,7 @@ export const NormalizedAnonymizationFieldError = z.object({ export type AnonymizationFieldResponse = z.infer; export const AnonymizationFieldResponse = z.object({ - id: UUID, + id: NonEmptyString, timestamp: NonEmptyString.optional(), field: z.string(), allowed: z.boolean().optional(), diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml index e07e492b5fdbe1..663dafe7633033 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml @@ -103,9 +103,9 @@ components: - field properties: id: - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' 'timestamp': - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' field: type: string allowed: @@ -232,4 +232,3 @@ components: type: boolean anonymized: type: boolean - \ No newline at end of file diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts index 5d218afd481311..6c2ea102a501db 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts @@ -18,5 +18,6 @@ import { z } from 'zod'; export type GetCapabilitiesResponse = z.infer; export const GetCapabilitiesResponse = z.object({ + assistantKnowledgeBaseByDefault: z.boolean(), assistantModelEvaluation: z.boolean(), }); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml index 4664405cfef338..7461bdbc932370 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml @@ -19,9 +19,12 @@ paths: schema: type: object properties: + assistantKnowledgeBaseByDefault: + type: boolean assistantModelEvaluation: type: boolean required: + - assistantKnowledgeBaseByDefault - assistantModelEvaluation '400': description: Generic Error diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts new file mode 100644 index 00000000000000..d98ee02af9ce49 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Common Elastic AI Assistant Attributes + * version: not applicable + */ + +/** + * A string that is not empty and does not contain only whitespace + */ +export type NonEmptyString = z.infer; +export const NonEmptyString = z + .string() + .min(1) + .regex(/^(?! *$).+$/); + +/** + * A universally unique identifier + */ +export type UUID = z.infer; +export const UUID = z.string().uuid(); + +/** + * Could be any string, not necessarily a UUID + */ +export type User = z.infer; +export const User = z.object({ + /** + * User id + */ + id: z.string().optional(), + /** + * User name + */ + name: z.string().optional(), +}); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml new file mode 100644 index 00000000000000..5c580c52281add --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml @@ -0,0 +1,30 @@ +openapi: 3.0.0 +info: + title: Common Elastic AI Assistant Attributes + version: 'not applicable' +paths: {} +components: + x-codegen-enabled: true + schemas: + NonEmptyString: + type: string + pattern: ^(?! *$).+$ + minLength: 1 + description: A string that is not empty and does not contain only whitespace + + UUID: + type: string + format: uuid + description: A universally unique identifier + + User: + type: object + description: Could be any string, not necessarily a UUID + properties: + id: + type: string + description: User id + name: + type: string + description: User name + diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts index 808cf88fcec7c9..a8637be38c1461 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts @@ -16,35 +16,7 @@ import { z } from 'zod'; * version: not applicable */ -/** - * A string that is not empty and does not contain only whitespace - */ -export type NonEmptyString = z.infer; -export const NonEmptyString = z - .string() - .min(1) - .regex(/^(?! *$).+$/); - -/** - * A universally unique identifier - */ -export type UUID = z.infer; -export const UUID = z.string().uuid(); - -/** - * Could be any string, not necessarily a UUID - */ -export type User = z.infer; -export const User = z.object({ - /** - * User id. - */ - id: z.string().optional(), - /** - * User name. - */ - name: z.string().optional(), -}); +import { NonEmptyString, User } from '../common_attributes.gen'; /** * trace Data @@ -180,7 +152,7 @@ export const ConversationSummary = z.object({ export type ErrorSchema = z.infer; export const ErrorSchema = z .object({ - id: UUID.optional(), + id: NonEmptyString.optional(), error: z.object({ status_code: z.number().int().min(400), message: z.string(), @@ -190,7 +162,7 @@ export const ErrorSchema = z export type ConversationResponse = z.infer; export const ConversationResponse = z.object({ - id: z.union([UUID, NonEmptyString]), + id: NonEmptyString, /** * The conversation title. */ @@ -235,7 +207,7 @@ export const ConversationResponse = z.object({ export type ConversationUpdateProps = z.infer; export const ConversationUpdateProps = z.object({ - id: z.union([UUID, NonEmptyString]), + id: NonEmptyString, /** * The conversation title. */ diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml index 3f2827b3480040..49aaaa5663a1c2 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml @@ -6,27 +6,6 @@ paths: {} components: x-codegen-enabled: true schemas: - NonEmptyString: - type: string - pattern: ^(?! *$).+$ - minLength: 1 - description: A string that is not empty and does not contain only whitespace - - UUID: - type: string - format: uuid - description: A universally unique identifier - - User: - type: object - description: Could be any string, not necessarily a UUID - properties: - id: - type: string - description: User id. - name: - type: string - description: User name. TraceData: type: object @@ -97,7 +76,7 @@ components: $ref: '#/components/schemas/MessageRole' description: Message role. timestamp: - $ref: '#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' description: The timestamp message was sent or received. isError: type: boolean @@ -135,7 +114,7 @@ components: type: string description: Summary text of the conversation over time. timestamp: - $ref: '#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' description: The timestamp summary was updated. public: type: boolean @@ -151,7 +130,7 @@ components: additionalProperties: false properties: id: - $ref: '#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' error: type: object required: @@ -175,9 +154,7 @@ components: - category properties: id: - oneOf: - - $ref: '#/components/schemas/UUID' - - $ref: '#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' title: type: string description: The conversation title. @@ -187,7 +164,7 @@ components: summary: $ref: '#/components/schemas/ConversationSummary' 'timestamp': - $ref: '#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' updatedAt: description: The last time conversation was updated. type: string @@ -199,7 +176,7 @@ components: users: type: array items: - $ref: '#/components/schemas/User' + $ref: '../common_attributes.schema.yaml#/components/schemas/User' messages: type: array items: @@ -224,9 +201,7 @@ components: - id properties: id: - oneOf: - - $ref: '#/components/schemas/UUID' - - $ref: '#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' title: type: string description: The conversation title. diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts index ed5f1b8f057c69..58dc70f38789b7 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts @@ -19,10 +19,10 @@ import { z } from 'zod'; import { ConversationCreateProps, ConversationResponse, - UUID, ConversationUpdateProps, ConversationMessageCreateProps, } from './common_attributes.gen'; +import { NonEmptyString } from '../common_attributes.gen'; export type AppendConversationMessageRequestParams = z.infer< typeof AppendConversationMessageRequestParams @@ -31,7 +31,7 @@ export const AppendConversationMessageRequestParams = z.object({ /** * The conversation's `id` value. */ - id: UUID, + id: NonEmptyString, }); export type AppendConversationMessageRequestParamsInput = z.input< typeof AppendConversationMessageRequestParams @@ -60,7 +60,7 @@ export const DeleteConversationRequestParams = z.object({ /** * The conversation's `id` value. */ - id: UUID, + id: NonEmptyString, }); export type DeleteConversationRequestParamsInput = z.input; @@ -72,7 +72,7 @@ export const ReadConversationRequestParams = z.object({ /** * The conversation's `id` value. */ - id: UUID, + id: NonEmptyString, }); export type ReadConversationRequestParamsInput = z.input; @@ -84,7 +84,7 @@ export const UpdateConversationRequestParams = z.object({ /** * The conversation's `id` value. */ - id: UUID, + id: NonEmptyString, }); export type UpdateConversationRequestParamsInput = z.input; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml index a7f08659e76e31..1a4f490a202c7b 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml @@ -37,7 +37,7 @@ paths: type: string message: type: string - + /api/elastic_assistant/conversations/{id}: get: operationId: ReadConversation @@ -52,7 +52,7 @@ paths: required: true description: The conversation's `id` value. schema: - $ref: './common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Indicates a successful call. @@ -86,7 +86,7 @@ paths: required: true description: The conversation's `id` value. schema: - $ref: './common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' requestBody: required: true content: @@ -126,7 +126,7 @@ paths: required: true description: The conversation's `id` value. schema: - $ref: './common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Indicates a successful call. @@ -147,7 +147,7 @@ paths: type: string message: type: string - + /api/elastic_assistant/conversations/{id}/messages: post: operationId: AppendConversationMessage @@ -162,7 +162,7 @@ paths: required: true description: The conversation's `id` value. schema: - $ref: './common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' requestBody: required: true content: @@ -188,4 +188,4 @@ paths: error: type: string message: - type: string \ No newline at end of file + type: string diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts index 24d484bdd06c6b..c9c2d2a8be3c09 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts @@ -18,6 +18,9 @@ export const API_VERSIONS = { export const PUBLIC_API_ACCESS = 'public'; export const INTERNAL_API_ACCESS = 'internal'; +// Common Schemas +export * from './common_attributes.gen'; + // Attack discovery Schemas export * from './attack_discovery/post_attack_discovery_route.gen'; @@ -37,5 +40,8 @@ export * from './conversations/find_conversations_route.gen'; // Actions Connector Schemas export * from './actions_connector/post_actions_connector_execute_route.gen'; -// KB Schemas +// Knowledge Base Schemas export * from './knowledge_base/crud_kb_route.gen'; +export * from './knowledge_base/bulk_crud_knowledge_base_route.gen'; +export * from './knowledge_base/common_attributes.gen'; +export * from './knowledge_base/crud_knowledge_base_route.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts new file mode 100644 index 00000000000000..9ff055e656fe3f --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Bulk Knowledge Base Actions API endpoint + * version: 2023-10-31 + */ + +import { + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryUpdateProps, + KnowledgeBaseEntryResponse, +} from './common_attributes.gen'; + +export type KnowledgeBaseEntryBulkActionSkipReason = z.infer< + typeof KnowledgeBaseEntryBulkActionSkipReason +>; +export const KnowledgeBaseEntryBulkActionSkipReason = z.literal( + 'KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED' +); + +export type KnowledgeBaseEntryBulkActionSkipResult = z.infer< + typeof KnowledgeBaseEntryBulkActionSkipResult +>; +export const KnowledgeBaseEntryBulkActionSkipResult = z.object({ + id: z.string(), + name: z.string().optional(), + skip_reason: KnowledgeBaseEntryBulkActionSkipReason, +}); + +export type KnowledgeBaseEntryDetailsInError = z.infer; +export const KnowledgeBaseEntryDetailsInError = z.object({ + id: z.string(), + name: z.string().optional(), +}); + +export type NormalizedKnowledgeBaseEntryError = z.infer; +export const NormalizedKnowledgeBaseEntryError = z.object({ + message: z.string(), + statusCode: z.number().int(), + err_code: z.string().optional(), + knowledgeBaseEntries: z.array(KnowledgeBaseEntryDetailsInError), +}); + +export type KnowledgeBaseEntryBulkCrudActionResults = z.infer< + typeof KnowledgeBaseEntryBulkCrudActionResults +>; +export const KnowledgeBaseEntryBulkCrudActionResults = z.object({ + updated: z.array(KnowledgeBaseEntryResponse), + created: z.array(KnowledgeBaseEntryResponse), + deleted: z.array(z.string()), + skipped: z.array(KnowledgeBaseEntryBulkActionSkipResult), +}); + +export type KnowledgeBaseEntryBulkCrudActionSummary = z.infer< + typeof KnowledgeBaseEntryBulkCrudActionSummary +>; +export const KnowledgeBaseEntryBulkCrudActionSummary = z.object({ + failed: z.number().int(), + skipped: z.number().int(), + succeeded: z.number().int(), + total: z.number().int(), +}); + +export type KnowledgeBaseEntryBulkCrudActionResponse = z.infer< + typeof KnowledgeBaseEntryBulkCrudActionResponse +>; +export const KnowledgeBaseEntryBulkCrudActionResponse = z.object({ + success: z.boolean().optional(), + statusCode: z.number().int().optional(), + message: z.string().optional(), + knowledgeBaseEntriesCount: z.number().int().optional(), + attributes: z.object({ + results: KnowledgeBaseEntryBulkCrudActionResults, + summary: KnowledgeBaseEntryBulkCrudActionSummary, + errors: z.array(NormalizedKnowledgeBaseEntryError).optional(), + }), +}); + +export type KnowledgeBaseEntryBulkActionBase = z.infer; +export const KnowledgeBaseEntryBulkActionBase = z.object({ + /** + * Query to filter Knowledge Base Entries + */ + query: z.string().optional(), + /** + * Array of Knowledge base Entry IDs + */ + ids: z.array(z.string()).min(1).optional(), +}); + +export type PerformKnowledgeBaseEntryBulkActionRequestBody = z.infer< + typeof PerformKnowledgeBaseEntryBulkActionRequestBody +>; +export const PerformKnowledgeBaseEntryBulkActionRequestBody = z.object({ + delete: KnowledgeBaseEntryBulkActionBase.optional(), + create: z.array(KnowledgeBaseEntryCreateProps).optional(), + update: z.array(KnowledgeBaseEntryUpdateProps).optional(), +}); +export type PerformKnowledgeBaseEntryBulkActionRequestBodyInput = z.input< + typeof PerformKnowledgeBaseEntryBulkActionRequestBody +>; + +export type PerformKnowledgeBaseEntryBulkActionResponse = z.infer< + typeof PerformKnowledgeBaseEntryBulkActionResponse +>; +export const PerformKnowledgeBaseEntryBulkActionResponse = KnowledgeBaseEntryBulkCrudActionResponse; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml new file mode 100644 index 00000000000000..f8a2ee49d399a9 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml @@ -0,0 +1,175 @@ +openapi: 3.0.0 +info: + title: Bulk Knowledge Base Actions API endpoint + version: '2023-10-31' +paths: + /api/elastic_assistant/knowledge_base/entries/_bulk_action: + post: + operationId: PerformKnowledgeBaseEntryBulkAction + x-codegen-enabled: true + summary: Applies a bulk action to multiple Knowledge Base Entries + description: The bulk action is applied to all Knowledge Base Entries that match the filter or to the list of Knowledge Base Entries by their IDs + tags: + - Knowledge Base Entries Bulk API + requestBody: + content: + application/json: + schema: + type: object + properties: + delete: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkActionBase' + create: + type: array + items: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryCreateProps' + update: + type: array + items: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryUpdateProps' + responses: + 200: + description: Successful bulk operation request + content: + application/json: + schema: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkCrudActionResponse' + 400: + description: Generic Error + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryErrorSchema' + +components: + schemas: + KnowledgeBaseEntryBulkActionSkipReason: + type: string + enum: + - KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED + + KnowledgeBaseEntryBulkActionSkipResult: + type: object + properties: + id: + type: string + name: + type: string + skip_reason: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkActionSkipReason' + required: + - id + - skip_reason + + KnowledgeBaseEntryDetailsInError: + type: object + properties: + id: + type: string + name: + type: string + required: + - id + + NormalizedKnowledgeBaseEntryError: + type: object + properties: + message: + type: string + statusCode: + type: integer + err_code: + type: string + knowledgeBaseEntries: + type: array + items: + $ref: '#/components/schemas/KnowledgeBaseEntryDetailsInError' + required: + - message + - statusCode + - knowledgeBaseEntries + + KnowledgeBaseEntryBulkCrudActionResults: + type: object + properties: + updated: + type: array + items: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + created: + type: array + items: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + deleted: + type: array + items: + type: string + skipped: + type: array + items: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkActionSkipResult' + required: + - updated + - created + - deleted + - skipped + + KnowledgeBaseEntryBulkCrudActionSummary: + type: object + properties: + failed: + type: integer + skipped: + type: integer + succeeded: + type: integer + total: + type: integer + required: + - failed + - skipped + - succeeded + - total + + KnowledgeBaseEntryBulkCrudActionResponse: + type: object + properties: + success: + type: boolean + statusCode: + type: integer + message: + type: string + knowledgeBaseEntriesCount: + type: integer + attributes: + type: object + properties: + results: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkCrudActionResults' + summary: + $ref: '#/components/schemas/KnowledgeBaseEntryBulkCrudActionSummary' + errors: + type: array + items: + $ref: '#/components/schemas/NormalizedKnowledgeBaseEntryError' + required: + - results + - summary + required: + - attributes + + + KnowledgeBaseEntryBulkActionBase: + x-inline: true + type: object + properties: + query: + type: string + description: Query to filter Knowledge Base Entries + ids: + type: array + description: Array of Knowledge base Entry IDs + minItems: 1 + items: + type: string diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts new file mode 100644 index 00000000000000..0d44cbe51e320a --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts @@ -0,0 +1,119 @@ +/* + * 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 { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Common Knowledge Base Attributes + * version: not applicable + */ + +import { NonEmptyString, User } from '../common_attributes.gen'; + +export type KnowledgeBaseEntryErrorSchema = z.infer; +export const KnowledgeBaseEntryErrorSchema = z + .object({ + statusCode: z.number(), + error: z.string(), + message: z.string(), + }) + .strict(); + +/** + * Metadata about an Knowledge Base Entry + */ +export type Metadata = z.infer; +export const Metadata = z.object({ + /** + * Knowledge Base resource name + */ + kbResource: z.string(), + /** + * Original text content source + */ + source: z.string(), + /** + * Whether or not this resource should always be included + */ + required: z.boolean(), +}); + +/** + * Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings + */ +export type Vector = z.infer; +export const Vector = z.object({ + /** + * ID of the model used to create the embeddings + */ + modelId: z.string(), + /** + * Tokens with their corresponding values + */ + tokens: z.object({}).catchall(z.number()), +}); + +export type KnowledgeBaseEntryResponse = z.infer; +export const KnowledgeBaseEntryResponse = z.object({ + timestamp: NonEmptyString.optional(), + id: NonEmptyString, + /** + * Time the Knowledge Base Entry was created + */ + createdAt: z.string(), + /** + * User who created the Knowledge Base Entry + */ + createdBy: z.string().optional(), + /** + * Time the Knowledge Base Entry was last updated + */ + updatedAt: z.string().optional(), + /** + * User who last updated the Knowledge Base Entry + */ + updatedBy: z.string().optional(), + users: z.array(User), + /** + * Metadata about the Knowledge Base Entry + */ + metadata: Metadata.optional(), + /** + * Kibana space + */ + namespace: z.string(), + /** + * Knowledge Base Entry content + */ + text: z.string(), + vector: Vector.optional(), +}); + +export type KnowledgeBaseEntryUpdateProps = z.infer; +export const KnowledgeBaseEntryUpdateProps = z.object({ + id: NonEmptyString, + /** + * Metadata about the Knowledge Base Entry + */ + metadata: Metadata.optional(), +}); + +export type KnowledgeBaseEntryCreateProps = z.infer; +export const KnowledgeBaseEntryCreateProps = z.object({ + /** + * Metadata about the Knowledge Base Entry + */ + metadata: Metadata, + /** + * Knowledge Base Entry content + */ + text: z.string(), +}); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml new file mode 100644 index 00000000000000..a9a9794852953e --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml @@ -0,0 +1,124 @@ +openapi: 3.0.0 +info: + title: Common Knowledge Base Attributes + version: 'not applicable' +paths: {} +components: + x-codegen-enabled: true + schemas: + + KnowledgeBaseEntryErrorSchema: + type: object + required: + - statusCode + - error + - message + additionalProperties: false + properties: + statusCode: + type: number + error: + type: string + message: + type: string + + Metadata: + type: object + description: Metadata about an Knowledge Base Entry + required: + - 'kbResource' + - 'source' + - 'required' + properties: + kbResource: + type: string + description: Knowledge Base resource name + source: + type: string + description: Original text content source + required: + type: boolean + description: Whether or not this resource should always be included + + Vector: + type: object + description: Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings + required: + - 'modelId' + - 'tokens' + properties: + modelId: + type: string + description: ID of the model used to create the embeddings + tokens: + type: object + additionalProperties: + type: number + description: Tokens with their corresponding values + + KnowledgeBaseEntryResponse: + type: object + required: + - id + - createdAt + - users + - namespace + - text + properties: + 'timestamp': + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + id: + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + createdAt: + description: Time the Knowledge Base Entry was created + type: string + createdBy: + description: User who created the Knowledge Base Entry + type: string + updatedAt: + description: Time the Knowledge Base Entry was last updated + type: string + updatedBy: + description: User who last updated the Knowledge Base Entry + type: string + users: + type: array + items: + $ref: '../common_attributes.schema.yaml#/components/schemas/User' + metadata: + $ref: '#/components/schemas/Metadata' + description: Metadata about the Knowledge Base Entry + namespace: + type: string + description: Kibana space + text: + type: string + description: Knowledge Base Entry content + vector: + $ref: '#/components/schemas/Vector' + + KnowledgeBaseEntryUpdateProps: + type: object + required: + - id + properties: + id: + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + metadata: + $ref: '#/components/schemas/Metadata' + description: Metadata about the Knowledge Base Entry + + KnowledgeBaseEntryCreateProps: + type: object + required: + - metadata + - text + properties: + metadata: + $ref: '#/components/schemas/Metadata' + description: Metadata about the Knowledge Base Entry + text: + type: string + description: Knowledge Base Entry content + + diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts index 634cd8cb6e78bb..8c85cbce321082 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts @@ -67,6 +67,8 @@ export type ReadKnowledgeBaseRequestParamsInput = z.input; export const ReadKnowledgeBaseResponse = z.object({ elser_exists: z.boolean().optional(), + esql_exists: z.boolean().optional(), index_exists: z.boolean().optional(), + is_setup_in_progress: z.boolean().optional(), pipeline_exists: z.boolean().optional(), }); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml index 650a7e141ce398..16d13c24f23ea4 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml @@ -60,8 +60,12 @@ paths: properties: elser_exists: type: boolean + esql_exists: + type: boolean index_exists: type: boolean + is_setup_in_progress: + type: boolean pipeline_exists: type: boolean 400: diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts new file mode 100644 index 00000000000000..92523a43b8e761 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts @@ -0,0 +1,91 @@ +/* + * 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 { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Manage Knowledge Base Entries API endpoint + * version: 2023-10-31 + */ + +import { + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryResponse, + KnowledgeBaseEntryUpdateProps, +} from './common_attributes.gen'; +import { NonEmptyString } from '../common_attributes.gen'; + +export type CreateKnowledgeBaseEntryRequestBody = z.infer< + typeof CreateKnowledgeBaseEntryRequestBody +>; +export const CreateKnowledgeBaseEntryRequestBody = KnowledgeBaseEntryCreateProps; +export type CreateKnowledgeBaseEntryRequestBodyInput = z.input< + typeof CreateKnowledgeBaseEntryRequestBody +>; + +export type CreateKnowledgeBaseEntryResponse = z.infer; +export const CreateKnowledgeBaseEntryResponse = KnowledgeBaseEntryResponse; + +export type DeleteKnowledgeBaseEntryRequestParams = z.infer< + typeof DeleteKnowledgeBaseEntryRequestParams +>; +export const DeleteKnowledgeBaseEntryRequestParams = z.object({ + /** + * The Knowledge Base Entry's `id` value + */ + id: NonEmptyString, +}); +export type DeleteKnowledgeBaseEntryRequestParamsInput = z.input< + typeof DeleteKnowledgeBaseEntryRequestParams +>; + +export type DeleteKnowledgeBaseEntryResponse = z.infer; +export const DeleteKnowledgeBaseEntryResponse = KnowledgeBaseEntryResponse; + +export type ReadKnowledgeBaseEntryRequestParams = z.infer< + typeof ReadKnowledgeBaseEntryRequestParams +>; +export const ReadKnowledgeBaseEntryRequestParams = z.object({ + /** + * The Knowledge Base Entry's `id` value. + */ + id: NonEmptyString, +}); +export type ReadKnowledgeBaseEntryRequestParamsInput = z.input< + typeof ReadKnowledgeBaseEntryRequestParams +>; + +export type ReadKnowledgeBaseEntryResponse = z.infer; +export const ReadKnowledgeBaseEntryResponse = KnowledgeBaseEntryResponse; + +export type UpdateKnowledgeBaseEntryRequestParams = z.infer< + typeof UpdateKnowledgeBaseEntryRequestParams +>; +export const UpdateKnowledgeBaseEntryRequestParams = z.object({ + /** + * The Knowledge Base Entry's `id` value + */ + id: NonEmptyString, +}); +export type UpdateKnowledgeBaseEntryRequestParamsInput = z.input< + typeof UpdateKnowledgeBaseEntryRequestParams +>; + +export type UpdateKnowledgeBaseEntryRequestBody = z.infer< + typeof UpdateKnowledgeBaseEntryRequestBody +>; +export const UpdateKnowledgeBaseEntryRequestBody = KnowledgeBaseEntryUpdateProps; +export type UpdateKnowledgeBaseEntryRequestBodyInput = z.input< + typeof UpdateKnowledgeBaseEntryRequestBody +>; + +export type UpdateKnowledgeBaseEntryResponse = z.infer; +export const UpdateKnowledgeBaseEntryResponse = KnowledgeBaseEntryResponse; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml new file mode 100644 index 00000000000000..6db7da89f55e51 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml @@ -0,0 +1,122 @@ +openapi: 3.0.0 +info: + title: Manage Knowledge Base Entries API endpoint + version: '2023-10-31' +paths: + /api/elastic_assistant/knowledge_base/entries: + post: + operationId: CreateKnowledgeBaseEntry + x-codegen-enabled: true + description: Create a Knowledge Base Entry + summary: Create a Knowledge Base Entry + tags: + - Knowledge Base Entries API + requestBody: + required: true + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryCreateProps' + responses: + 200: + description: Successful request returning Knowledge Base Entries + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + 400: + description: Generic Error + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryErrorSchema' + + /api/elastic_assistant/knowledge_base/entries/{id}: + get: + operationId: ReadKnowledgeBaseEntry + x-codegen-enabled: true + description: Read a Knowledge Base Entry + summary: Read a Knowledge Base Entry + tags: + - Knowledge Base Entries API + parameters: + - name: id + in: path + required: true + description: The Knowledge Base Entry's `id` value. + schema: + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Successful request returning a Knowledge Base Entry + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + 400: + description: Generic Error + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryErrorSchema' + put: + operationId: UpdateKnowledgeBaseEntry + x-codegen-enabled: true + description: Update a Knowledge Base Entry + summary: Update a Knowledge Base Entry + tags: + - Knowledge Base Entries API + parameters: + - name: id + in: path + required: true + description: The Knowledge Base Entry's `id` value + schema: + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + requestBody: + required: true + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryUpdateProps' + responses: + 200: + description: Successful request returning the updated Knowledge Base Entry + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + 400: + description: Generic Error + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryErrorSchema' + delete: + operationId: DeleteKnowledgeBaseEntry + x-codegen-enabled: true + description: Deletes a single Knowledge Base Entry using the `id` field + summary: Deletes a single Knowledge Base Entry using the `id` field + tags: + - Knowledge Base Entries API + parameters: + - name: id + in: path + required: true + description: The Knowledge Base Entry's `id` value + schema: + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Successful request returning the deleted Knowledge Base Entry + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryResponse' + 400: + description: Generic Error + content: + application/json: + schema: + $ref: './common_attributes.schema.yaml#/components/schemas/KnowledgeBaseEntryErrorSchema' + diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts index ce54c6a41fecc6..234b1157b5f718 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts @@ -16,7 +16,7 @@ import { z } from 'zod'; * version: 2023-10-31 */ -import { UUID, NonEmptyString, User } from '../conversations/common_attributes.gen'; +import { NonEmptyString, User } from '../common_attributes.gen'; export type BulkActionSkipReason = z.infer; export const BulkActionSkipReason = z.literal('PROMPT_FIELD_NOT_MODIFIED'); @@ -44,7 +44,7 @@ export const NormalizedPromptError = z.object({ export type PromptResponse = z.infer; export const PromptResponse = z.object({ - id: UUID, + id: NonEmptyString, timestamp: NonEmptyString.optional(), name: z.string(), promptType: z.string(), diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml index 2f6a419d9bf2c0..355583ae866678 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml @@ -105,9 +105,9 @@ components: - content properties: id: - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/UUID' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' 'timestamp': - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' name: type: string promptType: @@ -131,7 +131,7 @@ components: users: type: array items: - $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/User' + $ref: '../common_attributes.schema.yaml#/components/schemas/User' namespace: type: string description: Kibana space @@ -256,4 +256,3 @@ components: type: boolean isShared: type: boolean - \ No newline at end of file diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx index aabdcb6909ccbd..eefa9f3593f611 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx @@ -13,11 +13,10 @@ import React from 'react'; import { useFetchAnonymizationFields } from './use_fetch_anonymization_fields'; import { HttpSetup } from '@kbn/core-http-browser'; import { useAssistantContext } from '../../../assistant_context'; - -const statusResponse = { assistantModelEvaluation: true, assistantStreamingEnabled: false }; +import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const http = { - fetch: jest.fn().mockResolvedValue(statusResponse), + fetch: jest.fn().mockResolvedValue(defaultAssistantFeatures), } as unknown as HttpSetup; jest.mock('../../../assistant_context'); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/__mocks__/use_capabilities.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/__mocks__/use_capabilities.tsx new file mode 100644 index 00000000000000..d6dd239d4b6b8b --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/__mocks__/use_capabilities.tsx @@ -0,0 +1,17 @@ +/* + * 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 { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; + +export const useCapabilities = jest.fn().mockReturnValue({ + isLoading: false, + isError: false, + data: defaultAssistantFeatures, + error: null, + isFetching: false, + isSuccess: true, +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/use_capabilities.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/use_capabilities.test.tsx index 29ad65929bc4c2..6101782ae43b1e 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/use_capabilities.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/capabilities/use_capabilities.test.tsx @@ -11,15 +11,10 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { ReactNode } from 'react'; import React from 'react'; import { useCapabilities, UseCapabilitiesParams } from './use_capabilities'; -import { API_VERSIONS } from '@kbn/elastic-assistant-common'; - -const statusResponse = { - assistantModelEvaluation: true, - assistantStreamingEnabled: false, -}; +import { API_VERSIONS, defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const http = { - get: jest.fn().mockResolvedValue(statusResponse), + get: jest.fn().mockResolvedValue(defaultAssistantFeatures), }; const toasts = { addError: jest.fn(), diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx index 86b39f5ea43bee..22023179ad5dea 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx @@ -14,11 +14,10 @@ import { UseFetchCurrentUserConversationsParams, useFetchCurrentUserConversations, } from './use_fetch_current_user_conversations'; - -const statusResponse = { assistantModelEvaluation: true, assistantStreamingEnabled: false }; +import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const http = { - fetch: jest.fn().mockResolvedValue(statusResponse), + fetch: jest.fn().mockResolvedValue(defaultAssistantFeatures), }; const onFetch = jest.fn(); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx index ae465cdf27ba9c..94f62aa4040f28 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx @@ -7,7 +7,18 @@ import { HttpSetup } from '@kbn/core/public'; import { IHttpFetchError } from '@kbn/core-http-browser'; -import { API_VERSIONS, ApiConfig, Replacements } from '@kbn/elastic-assistant-common'; +import { + API_VERSIONS, + ApiConfig, + CreateKnowledgeBaseRequestParams, + CreateKnowledgeBaseResponse, + DeleteKnowledgeBaseRequestParams, + DeleteKnowledgeBaseResponse, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, + ReadKnowledgeBaseRequestParams, + ReadKnowledgeBaseResponse, + Replacements, +} from '@kbn/elastic-assistant-common'; import { API_ERROR } from '../translations'; import { getOptionalRequestParams } from '../helpers'; import { TraceOptions } from '../types'; @@ -179,19 +190,6 @@ export const fetchConnectorExecuteAction = async ({ } }; -export interface GetKnowledgeBaseStatusParams { - http: HttpSetup; - resource?: string; - signal?: AbortSignal | undefined; -} - -export interface GetKnowledgeBaseStatusResponse { - elser_exists: boolean; - esql_exists?: boolean; - index_exists: boolean; - pipeline_exists: boolean; -} - /** * API call for getting the status of the Knowledge Base. Provide * a resource to include the status of that specific resource. @@ -201,37 +199,29 @@ export interface GetKnowledgeBaseStatusResponse { * @param {string} [options.resource] - Resource to get the status of, otherwise status of overall KB * @param {AbortSignal} [options.signal] - AbortSignal * - * @returns {Promise} + * @returns {Promise} */ export const getKnowledgeBaseStatus = async ({ http, resource, signal, -}: GetKnowledgeBaseStatusParams): Promise => { +}: ReadKnowledgeBaseRequestParams & { http: HttpSetup; signal?: AbortSignal | undefined }): Promise< + ReadKnowledgeBaseResponse | IHttpFetchError +> => { try { - const path = `/internal/elastic_assistant/knowledge_base/${resource || ''}`; + const path = ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL.replace('{resource?}', resource || ''); const response = await http.fetch(path, { method: 'GET', signal, version: API_VERSIONS.internal.v1, }); - return response as GetKnowledgeBaseStatusResponse; + return response as ReadKnowledgeBaseResponse; } catch (error) { return error as IHttpFetchError; } }; -export interface PostKnowledgeBaseParams { - http: HttpSetup; - resource?: string; - signal?: AbortSignal | undefined; -} - -export interface PostKnowledgeBaseResponse { - success: boolean; -} - /** * API call for setting up the Knowledge Base. Provide a resource to set up a specific resource. * @@ -240,37 +230,30 @@ export interface PostKnowledgeBaseResponse { * @param {string} [options.resource] - Resource to be added to the KB, otherwise sets up the base KB * @param {AbortSignal} [options.signal] - AbortSignal * - * @returns {Promise} + * @returns {Promise} */ export const postKnowledgeBase = async ({ http, resource, signal, -}: PostKnowledgeBaseParams): Promise => { +}: CreateKnowledgeBaseRequestParams & { + http: HttpSetup; + signal?: AbortSignal | undefined; +}): Promise => { try { - const path = `/internal/elastic_assistant/knowledge_base/${resource || ''}`; + const path = ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL.replace('{resource?}', resource || ''); const response = await http.fetch(path, { method: 'POST', signal, version: API_VERSIONS.internal.v1, }); - return response as PostKnowledgeBaseResponse; + return response as CreateKnowledgeBaseResponse; } catch (error) { return error as IHttpFetchError; } }; -export interface DeleteKnowledgeBaseParams { - http: HttpSetup; - resource?: string; - signal?: AbortSignal | undefined; -} - -export interface DeleteKnowledgeBaseResponse { - success: boolean; -} - /** * API call for deleting the Knowledge Base. Provide a resource to delete that specific resource. * @@ -285,9 +268,12 @@ export const deleteKnowledgeBase = async ({ http, resource, signal, -}: DeleteKnowledgeBaseParams): Promise => { +}: DeleteKnowledgeBaseRequestParams & { + http: HttpSetup; + signal?: AbortSignal | undefined; +}): Promise => { try { - const path = `/internal/elastic_assistant/knowledge_base/${resource || ''}`; + const path = ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL.replace('{resource?}', resource || ''); const response = await http.fetch(path, { method: 'DELETE', signal, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index 5672a48dad0b90..18f2c6be2a8634 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -90,6 +90,7 @@ import { clearPresentationData } from '../connectorland/connector_setup/helpers' import { getGenAiConfig } from '../connectorland/helpers'; import { AssistantAnimatedIcon } from './assistant_animated_icon'; import { useFetchAnonymizationFields } from './api/anonymization_fields/use_fetch_anonymization_fields'; +import { InstallKnowledgeBaseButton } from '../knowledge_base/install_knowledge_base_button'; export interface Props { conversationTitle?: string; @@ -862,6 +863,9 @@ const AssistantComponent: React.FC = ({ isFlyoutMode /> + + + diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx index 4f745f51a11b76..8278cb15595351 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx @@ -38,7 +38,7 @@ const mockContext = { basePromptContexts: MOCK_QUICK_PROMPTS, setSelectedSettingsTab, http: {}, - modelEvaluatorEnabled: true, + assistantFeatures: { assistantModelEvaluation: true }, selectedSettingsTab: 'CONVERSATIONS_TAB', assistantAvailability: { isAssistantEnabled: true, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx index b6bd193aa85347..f83e6c0d72ee64 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx @@ -86,7 +86,7 @@ export const AssistantSettings: React.FC = React.memo( }) => { const { actionTypeRegistry, - modelEvaluatorEnabled, + assistantFeatures: { assistantModelEvaluation: modelEvaluatorEnabled }, http, toasts, selectedSettingsTab, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx index 26cd4340a14354..79a050b11bb27b 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx @@ -66,7 +66,7 @@ export const AssistantSettingsManagement: React.FC = React.memo( }) => { const { actionTypeRegistry, - modelEvaluatorEnabled, + assistantFeatures: { assistantModelEvaluation: modelEvaluatorEnabled }, http, selectedSettingsTab, setSelectedSettingsTab, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx index 7d9cc86941f34a..6a74dab81ac473 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx @@ -13,7 +13,7 @@ import type { IToasts } from '@kbn/core-notifications-browser'; import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; import { useLocalStorage, useSessionStorage } from 'react-use'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; -import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; +import { AssistantFeatures, defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; import { updatePromptContexts } from './helpers'; import type { PromptContext, @@ -97,6 +97,7 @@ export interface UseAssistantContext { actionTypeRegistry: ActionTypeRegistryContract; alertsIndexPattern: string | undefined; assistantAvailability: AssistantAvailability; + assistantFeatures: AssistantFeatures; assistantStreamingEnabled: boolean; assistantTelemetry?: AssistantTelemetry; augmentMessageCodeBlocks: ( @@ -127,7 +128,6 @@ export interface UseAssistantContext { knowledgeBase: KnowledgeBaseConfig; getLastConversationId: (conversationTitle?: string) => string; promptContexts: Record; - modelEvaluatorEnabled: boolean; nameSpace: string; registerPromptContext: RegisterPromptContext; selectedSettingsTab: SettingsTabs; @@ -276,15 +276,14 @@ export const AssistantProvider: React.FC = ({ ); // Fetch assistant capabilities - const { data: capabilities } = useCapabilities({ http, toasts }); - const { assistantModelEvaluation: modelEvaluatorEnabled } = - capabilities ?? defaultAssistantFeatures; + const { data: assistantFeatures } = useCapabilities({ http, toasts }); const value = useMemo( () => ({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, + assistantFeatures: assistantFeatures ?? defaultAssistantFeatures, assistantTelemetry, augmentMessageCodeBlocks, allQuickPrompts: localStorageQuickPrompts ?? [], @@ -297,7 +296,6 @@ export const AssistantProvider: React.FC = ({ getComments, http, knowledgeBase: { ...DEFAULT_KNOWLEDGE_BASE_SETTINGS, ...localStorageKnowledgeBase }, - modelEvaluatorEnabled, promptContexts, nameSpace, registerPromptContext, @@ -324,6 +322,7 @@ export const AssistantProvider: React.FC = ({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, + assistantFeatures, assistantTelemetry, augmentMessageCodeBlocks, localStorageQuickPrompts, @@ -336,7 +335,6 @@ export const AssistantProvider: React.FC = ({ getComments, http, localStorageKnowledgeBase, - modelEvaluatorEnabled, promptContexts, nameSpace, registerPromptContext, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/install_knowledge_base_button.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/install_knowledge_base_button.tsx new file mode 100644 index 00000000000000..f5a82fd02c55db --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/install_knowledge_base_button.tsx @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { EuiButton } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { useAssistantContext } from '../..'; +import { useSetupKnowledgeBase } from './use_setup_knowledge_base'; +import { useKnowledgeBaseStatus } from './use_knowledge_base_status'; + +const ESQL_RESOURCE = 'esql'; + +/** + * Self-contained component that renders a button to install the knowledge base. + * + * Only renders if `assistantKnowledgeBaseByDefault` feature flag is enabled. + */ +export const InstallKnowledgeBaseButton: React.FC = React.memo(() => { + const { + assistantFeatures: { assistantKnowledgeBaseByDefault: enableKnowledgeBaseByDefault }, + http, + toasts, + } = useAssistantContext(); + + const { data: kbStatus } = useKnowledgeBaseStatus({ http, resource: ESQL_RESOURCE }); + const { mutate: setupKB, isLoading: isSettingUpKB } = useSetupKnowledgeBase({ http, toasts }); + + const isSetupInProgress = kbStatus?.is_setup_in_progress || isSettingUpKB; + const isSetupComplete = + kbStatus?.elser_exists && + kbStatus?.index_exists && + kbStatus?.pipeline_exists && + kbStatus?.esql_exists; + + const onInstallKnowledgeBase = useCallback(() => { + setupKB(ESQL_RESOURCE); + }, [setupKB]); + + if (!enableKnowledgeBaseByDefault || isSetupComplete) { + return null; + } + + return ( + + {i18n.translate('xpack.elasticAssistant.knowledgeBase.installKnowledgeBaseButton', { + defaultMessage: 'Install Knowledge Base', + })} + + ); +}); + +InstallKnowledgeBaseButton.displayName = 'InstallKnowledgeBaseButton'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx index 20ab3aab4a26f7..56f6796ac16fa3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx @@ -13,9 +13,11 @@ import { KnowledgeBaseSettings } from './knowledge_base_settings'; import { TestProviders } from '../mock/test_providers/test_providers'; import { useKnowledgeBaseStatus } from './use_knowledge_base_status'; import { mockSystemPrompts } from '../mock/system_prompt'; +import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const mockUseAssistantContext = { allSystemPrompts: mockSystemPrompts, + assistantFeatures: jest.fn(() => defaultAssistantFeatures), conversations: {}, http: { basePath: { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx index 95bf7548749664..8c83d1f3403e8a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx @@ -35,7 +35,8 @@ import { useKnowledgeBaseStatus } from './use_knowledge_base_status'; import { useSetupKnowledgeBase } from './use_setup_knowledge_base'; const ESQL_RESOURCE = 'esql'; -const KNOWLEDGE_BASE_INDEX_PATTERN = '.kibana-elastic-ai-assistant-kb'; +const KNOWLEDGE_BASE_INDEX_PATTERN_OLD = '.kibana-elastic-ai-assistant-kb'; +const KNOWLEDGE_BASE_INDEX_PATTERN = '.kibana-elastic-ai-assistant-knowledge-base-(SPACE)'; interface Props { knowledgeBase: KnowledgeBaseConfig; @@ -47,7 +48,10 @@ interface Props { */ export const KnowledgeBaseSettings: React.FC = React.memo( ({ knowledgeBase, setUpdatedKnowledgeBaseSettings }) => { - const { http } = useAssistantContext(); + const { + assistantFeatures: { assistantKnowledgeBaseByDefault: enableKnowledgeBaseByDefault }, + http, + } = useAssistantContext(); const { data: kbStatus, isLoading, @@ -60,14 +64,18 @@ export const KnowledgeBaseSettings: React.FC = React.memo( const isElserEnabled = kbStatus?.elser_exists ?? false; const isKnowledgeBaseEnabled = (kbStatus?.index_exists && kbStatus?.pipeline_exists) ?? false; const isESQLEnabled = kbStatus?.esql_exists ?? false; + const isSetupInProgress = kbStatus?.is_setup_in_progress ?? false; // Resource availability state - const isLoadingKb = isLoading || isFetching || isSettingUpKB || isDeletingUpKB; + const isLoadingKb = + isLoading || isFetching || isSettingUpKB || isDeletingUpKB || isSetupInProgress; const isKnowledgeBaseAvailable = knowledgeBase.isEnabledKnowledgeBase && kbStatus?.elser_exists; const isESQLAvailable = knowledgeBase.isEnabledKnowledgeBase && isKnowledgeBaseAvailable && isKnowledgeBaseEnabled; // Prevent enabling if elser doesn't exist, but always allow to disable - const isSwitchDisabled = !kbStatus?.elser_exists && !knowledgeBase.isEnabledKnowledgeBase; + const isSwitchDisabled = enableKnowledgeBaseByDefault + ? false + : !kbStatus?.elser_exists && !knowledgeBase.isEnabledKnowledgeBase; // Calculated health state for EuiHealth component const elserHealth = isElserEnabled ? 'success' : 'subdued'; @@ -84,12 +92,18 @@ export const KnowledgeBaseSettings: React.FC = React.memo( isEnabledKnowledgeBase: event.target.checked, }); - // If enabling and ELSER exists, try to set up automatically - if (event.target.checked && kbStatus?.elser_exists) { + // If enabling and ELSER exists or automatic KB setup FF is enabled, try to set up automatically + if (event.target.checked && (enableKnowledgeBaseByDefault || kbStatus?.elser_exists)) { setupKB(ESQL_RESOURCE); } }, - [kbStatus?.elser_exists, knowledgeBase, setUpdatedKnowledgeBaseSettings, setupKB] + [ + enableKnowledgeBaseByDefault, + kbStatus?.elser_exists, + knowledgeBase, + setUpdatedKnowledgeBaseSettings, + setupKB, + ] ); const isEnabledKnowledgeBaseSwitch = useMemo(() => { @@ -149,7 +163,11 @@ export const KnowledgeBaseSettings: React.FC = React.memo( const knowledgeBaseDescription = useMemo(() => { return isKnowledgeBaseEnabled ? ( - {i18n.KNOWLEDGE_BASE_DESCRIPTION_INSTALLED(KNOWLEDGE_BASE_INDEX_PATTERN)}{' '} + {i18n.KNOWLEDGE_BASE_DESCRIPTION_INSTALLED( + enableKnowledgeBaseByDefault + ? KNOWLEDGE_BASE_INDEX_PATTERN + : KNOWLEDGE_BASE_INDEX_PATTERN_OLD + )}{' '} {knowledgeBaseActionButton} ) : ( @@ -157,7 +175,7 @@ export const KnowledgeBaseSettings: React.FC = React.memo( {i18n.KNOWLEDGE_BASE_DESCRIPTION} {knowledgeBaseActionButton} ); - }, [isKnowledgeBaseEnabled, knowledgeBaseActionButton]); + }, [enableKnowledgeBaseByDefault, isKnowledgeBaseEnabled, knowledgeBaseActionButton]); ////////////////////////////////////////////////////////////////////////////////////////// // ESQL Resource diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/use_knowledge_base_status.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/use_knowledge_base_status.tsx index 7ec7d227f9ef8d..c03eb31581e42e 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/use_knowledge_base_status.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/use_knowledge_base_status.tsx @@ -11,6 +11,7 @@ import type { HttpSetup, IHttpFetchError, ResponseErrorBody } from '@kbn/core-ht import type { IToasts } from '@kbn/core-notifications-browser'; import { i18n } from '@kbn/i18n'; import { useCallback } from 'react'; +import { ReadKnowledgeBaseResponse } from '@kbn/elastic-assistant-common'; import { getKnowledgeBaseStatus } from '../assistant/api'; const KNOWLEDGE_BASE_STATUS_QUERY_KEY = ['elastic-assistant', 'knowledge-base-status']; @@ -21,13 +22,6 @@ export interface UseKnowledgeBaseStatusParams { toasts?: IToasts; } -export interface GetKnowledgeBaseStatusResponse { - elser_exists: boolean; - esql_exists?: boolean; - index_exists: boolean; - pipeline_exists: boolean; -} - /** * Hook for getting the status of the Knowledge Base. Provide a resource name to include * the status for that specific resource within the KB. @@ -42,10 +36,7 @@ export const useKnowledgeBaseStatus = ({ http, resource, toasts, -}: UseKnowledgeBaseStatusParams): UseQueryResult< - GetKnowledgeBaseStatusResponse, - IHttpFetchError -> => { +}: UseKnowledgeBaseStatusParams): UseQueryResult => { return useQuery( KNOWLEDGE_BASE_STATUS_QUERY_KEY, async ({ signal }) => { diff --git a/x-pack/packages/kbn-elastic-assistant/index.ts b/x-pack/packages/kbn-elastic-assistant/index.ts index 56fb74af3aba4d..df0ba1e8db0f91 100644 --- a/x-pack/packages/kbn-elastic-assistant/index.ts +++ b/x-pack/packages/kbn-elastic-assistant/index.ts @@ -145,13 +145,6 @@ export type { PromptContextTemplate } from './impl/assistant/prompt_context/type */ export type { QuickPrompt } from './impl/assistant/quick_prompts/types'; -/** - * Knowledge Base API Responses - */ -export type { DeleteKnowledgeBaseResponse } from './impl/assistant/api'; -export type { GetKnowledgeBaseStatusResponse } from './impl/assistant/api'; -export type { PostKnowledgeBaseResponse } from './impl/assistant/api'; - export { useFetchCurrentUserConversations } from './impl/assistant/api/conversations/use_fetch_current_user_conversations'; export * from './impl/assistant/api/conversations/bulk_update_actions_conversations'; export { getConversationById } from './impl/assistant/api/conversations/conversations'; diff --git a/x-pack/plugins/elastic_assistant/common/constants.ts b/x-pack/plugins/elastic_assistant/common/constants.ts index 77fd99c7d5eb67..5c5233eaaa6c8a 100755 --- a/x-pack/plugins/elastic_assistant/common/constants.ts +++ b/x-pack/plugins/elastic_assistant/common/constants.ts @@ -15,9 +15,6 @@ export const POST_ACTIONS_CONNECTOR_EXECUTE = `${BASE_PATH}/actions/connector/{c // Attack discovery export const ATTACK_DISCOVERY = `${BASE_PATH}/attack_discovery`; -// Knowledge Base -export const KNOWLEDGE_BASE = `${BASE_PATH}/knowledge_base/{resource?}`; - // Model Evaluation export const EVALUATE = `${BASE_PATH}/evaluate`; diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts index 671cb1b2f0a88d..0850938633322c 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts @@ -5,7 +5,7 @@ * 2.0. */ import { httpServerMock } from '@kbn/core/server/mocks'; -import { CAPABILITIES, EVALUATE, KNOWLEDGE_BASE } from '../../common/constants'; +import { CAPABILITIES, EVALUATE } from '../../common/constants'; import { ConversationCreateProps, ConversationUpdateProps, @@ -16,6 +16,7 @@ import { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID, ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID_MESSAGES, ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, ELASTIC_AI_ASSISTANT_PROMPTS_URL_BULK_ACTION, ELASTIC_AI_ASSISTANT_PROMPTS_URL_FIND, PostEvaluateRequestBodyInput, @@ -42,21 +43,21 @@ export const requestMock = { export const getGetKnowledgeBaseStatusRequest = (resource?: string) => requestMock.create({ method: 'get', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, query: { resource }, }); export const getPostKnowledgeBaseRequest = (resource?: string) => requestMock.create({ method: 'post', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, query: { resource }, }); export const getDeleteKnowledgeBaseRequest = (resource?: string) => requestMock.create({ method: 'delete', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, query: { resource }, }); diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts index 78982d0437650a..6c5d9b2bc4d57d 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts @@ -17,6 +17,8 @@ import { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/s import { conversationsDataClientMock, dataClientMock } from './data_clients.mock'; import { AIAssistantConversationsDataClient } from '../ai_assistant_data_clients/conversations'; import { AIAssistantDataClient } from '../ai_assistant_data_clients'; +import { AIAssistantKnowledgeBaseDataClient } from '../ai_assistant_data_clients/knowledge_base'; +import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; export const createMockClients = () => { const core = coreMock.createRequestHandlerContext(); @@ -27,11 +29,12 @@ export const createMockClients = () => { clusterClient: core.elasticsearch.client, elasticAssistant: { actions: actionsClientMock.create(), - getRegisteredFeatures: jest.fn(), + getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), getRegisteredTools: jest.fn(), logger: loggingSystemMock.createLogger(), telemetry: coreMock.createSetup().analytics, getAIAssistantConversationsDataClient: conversationsDataClientMock.create(), + getAIAssistantKnowledgeBaseDataClient: dataClientMock.create(), getAIAssistantPromptsDataClient: dataClientMock.create(), getAIAssistantAnonymizationFieldsDataClient: dataClientMock.create(), getSpaceId: jest.fn(), @@ -85,7 +88,7 @@ const createElasticAssistantRequestContextMock = ( ): jest.Mocked => { return { actions: clients.elasticAssistant.actions as unknown as ActionsPluginStart, - getRegisteredFeatures: jest.fn(), + getRegisteredFeatures: jest.fn((pluginName: string) => defaultAssistantFeatures), getRegisteredTools: jest.fn(), logger: clients.elasticAssistant.logger, @@ -106,6 +109,14 @@ const createElasticAssistantRequestContextMock = ( () => clients.elasticAssistant.getAIAssistantPromptsDataClient ) as unknown as jest.MockInstance, [], unknown> & (() => Promise), + getAIAssistantKnowledgeBaseDataClient: jest.fn( + () => clients.elasticAssistant.getAIAssistantKnowledgeBaseDataClient + ) as unknown as jest.MockInstance< + Promise, + [boolean], + unknown + > & + ((initializeKnowledgeBase: boolean) => Promise), getCurrentUser: jest.fn(), getServerBasePath: jest.fn(), getSpaceId: jest.fn(), diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts index 550d523db4c6f6..38426dd06a36fc 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts @@ -33,7 +33,7 @@ describe('AIAssistantConversationsDataClient', () => { logger, elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '', + indexPatternsResourceName: '', currentUser: mockUser1, kibanaVersion: '8.8.0', }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts index fa27331f6c6c57..4838c70882f19e 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts @@ -30,7 +30,7 @@ describe('AIAssistantDataClient', () => { logger, elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts index 75f2b166f14684..5bc84e05c80876 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts @@ -21,7 +21,7 @@ export interface AIAssistantDataClientParams { kibanaVersion: string; spaceId: string; logger: Logger; - indexPatternsResorceName: string; + indexPatternsResourceName: string; currentUser: AuthenticatedUser | null; } @@ -38,7 +38,7 @@ export class AIAssistantDataClient { constructor(public readonly options: AIAssistantDataClientParams) { this.indexTemplateAndPattern = getIndexTemplateAndPattern( - this.options.indexPatternsResorceName, + this.options.indexPatternsResourceName, this.options.spaceId ?? DEFAULT_NAMESPACE_STRING ); this.currentUser = this.options.currentUser; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts new file mode 100644 index 00000000000000..5430bf597ebe7b --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts @@ -0,0 +1,83 @@ +/* + * 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 { v4 as uuidv4 } from 'uuid'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; + +import { + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryResponse, +} from '@kbn/elastic-assistant-common'; +import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { getKnowledgeBaseEntry } from './get_knowledge_base_entry'; +import { CreateKnowledgeBaseEntrySchema } from './types'; + +export interface CreateKnowledgeBaseEntryParams { + esClient: ElasticsearchClient; + logger: Logger; + knowledgeBaseIndex: string; + spaceId: string; + user: AuthenticatedUser; + knowledgeBaseEntry: KnowledgeBaseEntryCreateProps; +} + +export const createKnowledgeBaseEntry = async ({ + esClient, + knowledgeBaseIndex, + spaceId, + user, + knowledgeBaseEntry, + logger, +}: CreateKnowledgeBaseEntryParams): Promise => { + const createdAt = new Date().toISOString(); + const body = transformToCreateSchema(createdAt, spaceId, user, knowledgeBaseEntry); + try { + const response = await esClient.create({ + body, + id: uuidv4(), + index: knowledgeBaseIndex, + refresh: 'wait_for', + }); + + return await getKnowledgeBaseEntry({ + esClient, + knowledgeBaseIndex, + id: response._id, + logger, + user, + }); + } catch (err) { + logger.error( + `Error creating Knowledge Base Entry: ${err} with kbResource: ${knowledgeBaseEntry.metadata.kbResource}` + ); + throw err; + } +}; + +export const transformToCreateSchema = ( + createdAt: string, + spaceId: string, + user: AuthenticatedUser, + { metadata, text }: KnowledgeBaseEntryCreateProps +): CreateKnowledgeBaseEntrySchema => { + return { + '@timestamp': createdAt, + created_at: createdAt, + created_by: user.profile_uid ?? 'unknown', + updated_at: createdAt, + updated_by: user.profile_uid ?? 'unknown', + users: [ + { + id: user.profile_uid, + name: user.username, + }, + ], + namespace: spaceId, + metadata, + text, + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts new file mode 100644 index 00000000000000..16b5b35a9b2bb9 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { FieldMap } from '@kbn/data-stream-adapter'; + +export const knowledgeBaseFieldMap: FieldMap = { + '@timestamp': { + type: 'date', + array: false, + required: false, + }, + id: { + type: 'keyword', + array: false, + required: true, + }, + created_at: { + type: 'date', + array: false, + required: false, + }, + created_by: { + type: 'keyword', + array: false, + required: false, + }, + updated_at: { + type: 'date', + array: false, + required: false, + }, + updated_by: { + type: 'keyword', + array: false, + required: false, + }, + users: { + type: 'nested', + array: true, + required: false, + }, + 'users.id': { + type: 'keyword', + array: false, + required: true, + }, + 'users.name': { + type: 'keyword', + array: false, + required: false, + }, + metadata: { + type: 'object', + array: false, + required: false, + }, + 'metadata.kbResource': { + type: 'keyword', + array: false, + required: false, + }, + 'metadata.required': { + type: 'boolean', + array: false, + required: false, + }, + 'metadata.source': { + type: 'keyword', + array: false, + required: false, + }, + text: { + type: 'text', + array: false, + required: true, + }, + vector: { + type: 'object', + array: false, + required: false, + }, + 'vector.tokens': { + type: 'rank_features', + array: false, + required: false, + }, +} as const; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts new file mode 100644 index 00000000000000..c021e022765d09 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; +import { AuthenticatedUser } from '@kbn/security-plugin/common'; +import { EsKnowledgeBaseEntrySchema } from './types'; +import { transformESSearchToKnowledgeBaseEntry } from './transforms'; + +export interface GetKnowledgeBaseEntryParams { + esClient: ElasticsearchClient; + logger: Logger; + knowledgeBaseIndex: string; + id: string; + user: AuthenticatedUser; +} + +export const getKnowledgeBaseEntry = async ({ + esClient, + logger, + knowledgeBaseIndex, + id, + user, +}: GetKnowledgeBaseEntryParams): Promise => { + const filterByUser = [ + { + nested: { + path: 'users', + query: { + bool: { + must: [ + { + match: user.profile_uid + ? { 'users.id': user.profile_uid } + : { 'users.name': user.username }, + }, + ], + }, + }, + }, + }, + ]; + try { + const response = await esClient.search({ + query: { + bool: { + must: [ + { + bool: { + should: [ + { + term: { + _id: id, + }, + }, + ], + }, + }, + ...filterByUser, + ], + }, + }, + _source: true, + ignore_unavailable: true, + index: knowledgeBaseIndex, + seq_no_primary_term: true, + }); + const knowledgeBaseEntry = transformESSearchToKnowledgeBaseEntry(response); + return knowledgeBaseEntry[0] ?? null; + } catch (err) { + logger.error(`Error fetching knowledge base entry: ${err} with id: ${id}`); + throw err; + } +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts new file mode 100644 index 00000000000000..dc7f64e1aeee12 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { errors } from '@elastic/elasticsearch'; + +export const isModelAlreadyExistsError = (error: Error) => { + return ( + error instanceof errors.ResponseError && + (error.body.error.type === 'resource_not_found_exception' || + error.body.error.type === 'status_exception') + ); +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts new file mode 100644 index 00000000000000..771ec35c07c51d --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts @@ -0,0 +1,264 @@ +/* + * 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 { + MlTrainedModelDeploymentNodesStats, + MlTrainedModelStats, +} from '@elastic/elasticsearch/lib/api/types'; +import type { MlPluginSetup } from '@kbn/ml-plugin/server'; +import type { KibanaRequest } from '@kbn/core-http-server'; +import type { Document } from 'langchain/document'; +import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; +import pRetry from 'p-retry'; +import { AIAssistantDataClient, AIAssistantDataClientParams } from '..'; +import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; +import { loadESQL } from '../../lib/langchain/content_loaders/esql_loader'; +import { GetElser } from '../../types'; +import { transformToCreateSchema } from './create_knowledge_base_entry'; +import { EsKnowledgeBaseEntrySchema } from './types'; +import { transformESSearchToKnowledgeBaseEntry } from './transforms'; +import { ESQL_DOCS_LOADED_QUERY } from '../../routes/knowledge_base/constants'; +import { isModelAlreadyExistsError } from './helpers'; + +interface KnowledgeBaseDataClientParams extends AIAssistantDataClientParams { + ml: MlPluginSetup; + getElserId: GetElser; + getIsKBSetupInProgress: () => boolean; + ingestPipelineResourceName: string; + setIsKBSetupInProgress: (isInProgress: boolean) => void; +} +export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { + constructor(public readonly options: KnowledgeBaseDataClientParams) { + super(options); + } + + public get isSetupInProgress() { + return this.options.getIsKBSetupInProgress(); + } + + /** + * Downloads and installs ELSER model if not already installed + * + * @param soClient SavedObjectsClientContract for installing ELSER so that ML SO's are in sync + */ + private installModel = async ({ soClient }: { soClient: SavedObjectsClientContract }) => { + const elserId = await this.options.getElserId(); + this.options.logger.debug(`Installing ELSER model '${elserId}'...`); + + try { + await this.options.ml + // TODO: Potentially plumb soClient through DataClient from pluginStart + .trainedModelsProvider({} as KibanaRequest, soClient) + .installElasticModel(elserId); + } catch (error) { + this.options.logger.error(`Error installing ELSER model '${elserId}':\n${error}`); + } + }; + + /** + * Returns whether ELSER is installed/ready to deploy + * + * @returns Promise indicating whether the model is installed + */ + public isModelInstalled = async (): Promise => { + const elserId = await this.options.getElserId(); + this.options.logger.debug(`Checking if ELSER model '${elserId}' is installed...`); + + try { + const esClient = await this.options.elasticsearchClientPromise; + const getResponse = await esClient.ml.getTrainedModels({ + model_id: elserId, + include: 'definition_status', + }); + return Boolean(getResponse.trained_model_configs[0]?.fully_defined); + } catch (error) { + if (!isModelAlreadyExistsError(error)) { + this.options.logger.error( + `Error checking if ELSER model '${elserId}' is installed:\n${error}` + ); + } + return false; + } + }; + + /** + * Deploy the ELSER model with default configuration + */ + private deployModel = async () => { + const elserId = await this.options.getElserId(); + this.options.logger.debug(`Deploying ELSER model '${elserId}'...`); + try { + const esClient = await this.options.elasticsearchClientPromise; + await esClient.ml.startTrainedModelDeployment({ + model_id: elserId, + wait_for: 'fully_allocated', + }); + } catch (error) { + if (!isModelAlreadyExistsError(error)) { + this.options.logger.error(`Error deploying ELSER model '${elserId}':\n${error}`); + } + this.options.logger.debug(`Error deploying ELSER model '${elserId}', model already deployed`); + } + }; + + /** + * Checks if the provided model is deployed and allocated in Elasticsearch + * + * @returns Promise indicating whether the model is deployed + */ + public isModelDeployed = async (): Promise => { + const elserId = await this.options.getElserId(); + this.options.logger.debug(`Checking if ELSER model '${elserId}' is deployed...`); + + try { + const esClient = await this.options.elasticsearchClientPromise; + const getResponse = await esClient.ml.getTrainedModelsStats({ + model_id: elserId, + }); + + // For standardized way of checking deployment status see: https://github.com/elastic/elasticsearch/issues/106986 + const isReadyESS = (stats: MlTrainedModelStats) => + stats.deployment_stats?.state === 'started' && + stats.deployment_stats?.allocation_status.state === 'fully_allocated'; + + const isReadyServerless = (stats: MlTrainedModelStats) => + (stats.deployment_stats?.nodes as unknown as MlTrainedModelDeploymentNodesStats[]).some( + (node) => node.routing_state.routing_state === 'started' + ); + + return getResponse.trained_model_stats.some( + (stats) => isReadyESS(stats) || isReadyServerless(stats) + ); + } catch (e) { + // Returns 404 if it doesn't exist + return false; + } + }; + + /** + * Downloads and deploys recommended ELSER (if not already), then loads ES|QL docs + * + * NOTE: Before automatically installing ELSER in the background, we should perform deployment resource checks + * Only necessary for ESS, as Serverless can always auto-install if `productTier === complete` + * See ml-team issue for providing 'dry run' flag to perform these checks: https://github.com/elastic/ml-team/issues/1208 + * + * @param options + * @param options.esStore ElasticsearchStore for loading ES|QL docs via LangChain loaders + * @param options.soClient SavedObjectsClientContract for installing ELSER so that ML SO's are in sync + * + * @returns Promise + */ + public setupKnowledgeBase = async ({ + esStore, + soClient, + }: { + esStore: ElasticsearchStore; + soClient: SavedObjectsClientContract; + }): Promise => { + if (this.options.getIsKBSetupInProgress()) { + this.options.logger.debug('Knowledge Base setup already in progress'); + return; + } + + this.options.logger.debug('Starting Knowledge Base setup...'); + this.options.setIsKBSetupInProgress(true); + const elserId = await this.options.getElserId(); + + try { + const isInstalled = await this.isModelInstalled(); + if (!isInstalled) { + await this.installModel({ soClient }); + await pRetry( + async () => + (await this.isModelInstalled()) + ? Promise.resolve() + : Promise.reject(new Error('Model not installed')), + { minTimeout: 10000, maxTimeout: 10000, retries: 10 } + ); + this.options.logger.debug(`ELSER model '${elserId}' successfully installed!`); + } else { + this.options.logger.debug(`ELSER model '${elserId}' is already installed`); + } + + const isDeployed = await this.isModelDeployed(); + if (!isDeployed) { + await this.deployModel(); + await pRetry( + async () => + (await this.isModelDeployed()) + ? Promise.resolve() + : Promise.reject(new Error('Model not deployed')), + { minTimeout: 2000, retries: 10 } + ); + this.options.logger.debug(`ELSER model '${elserId}' successfully deployed!`); + } else { + this.options.logger.debug(`ELSER model '${elserId}' is already deployed`); + } + + this.options.logger.debug(`Checking if Knowledge Base docs have been loaded...`); + const kbDocsLoaded = (await esStore.similaritySearch(ESQL_DOCS_LOADED_QUERY)).length > 0; + if (!kbDocsLoaded) { + this.options.logger.debug(`Loading KB docs...`); + await loadESQL(esStore, this.options.logger); + } else { + this.options.logger.debug(`Knowledge Base docs already loaded!`); + } + } catch (e) { + this.options.logger.error(`Error setting up Knowledge Base: ${e.message}`); + } + this.options.setIsKBSetupInProgress(false); + }; + + /** + * Adds LangChain Documents to the knowledge base + * + * @param documents + * @param authenticatedUser + */ + public addKnowledgeBaseDocuments = async ({ + documents, + }: { + documents: Document[]; + }): Promise => { + const writer = await this.getWriter(); + const changedAt = new Date().toISOString(); + const authenticatedUser = this.options.currentUser; + if (authenticatedUser == null) { + throw new Error( + 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' + ); + } + // @ts-ignore + const { errors, docs_created: docsCreated } = await writer.bulk({ + documentsToCreate: documents.map((doc) => + transformToCreateSchema(changedAt, this.spaceId, authenticatedUser, { + // TODO: Update the LangChain Document Metadata type extension + metadata: { + kbResource: doc.metadata.kbResourcer ?? 'unknown', + required: doc.metadata.required ?? false, + source: doc.metadata.source ?? 'unknown', + }, + text: doc.pageContent, + }) + ), + authenticatedUser, + }); + const created = + docsCreated.length > 0 + ? await this.findDocuments({ + page: 1, + perPage: 10000, + filter: docsCreated.map((c) => `_id:${c}`).join(' OR '), + }) + : undefined; + this.options.logger.debug(`created: ${created?.data.hits.hits.length ?? '0'}`); + this.options.logger.debug(`errors: ${JSON.stringify(errors, null, 2)}`); + + return created?.data ? transformESSearchToKnowledgeBaseEntry(created?.data) : []; + }; +} diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts new file mode 100644 index 00000000000000..170fa0342f9d9e --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts @@ -0,0 +1,36 @@ +/* + * 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 { IngestPutPipelineRequest } from '@elastic/elasticsearch/lib/api/types'; + +export const knowledgeBaseIngestPipeline = ({ + id, + modelId, +}: { + id: string; + modelId: string; +}): IngestPutPipelineRequest => ({ + id, + description: 'Embedding pipeline for Elastic AI Assistant ELSER Knowledge Base', + processors: [ + { + inference: { + model_id: modelId, + target_field: 'vector', + field_map: { + text: 'text_field', + }, + inference_config: { + // @ts-expect-error + text_expansion: { + results_field: 'tokens', + }, + }, + }, + }, + ], +}); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts new file mode 100644 index 00000000000000..f185c5ba8fdc29 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { estypes } from '@elastic/elasticsearch'; +import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; +import { EsKnowledgeBaseEntrySchema } from './types'; + +export const transformESSearchToKnowledgeBaseEntry = ( + response: estypes.SearchResponse +): KnowledgeBaseEntryResponse[] => { + return response.hits.hits + .filter((hit) => hit._source !== undefined) + .map((hit) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const kbEntrySchema = hit._source!; + const kbEntry: KnowledgeBaseEntryResponse = { + timestamp: kbEntrySchema['@timestamp'], + id: hit._id, + createdAt: kbEntrySchema.created_at, + createdBy: kbEntrySchema.created_by, + updatedAt: kbEntrySchema.updated_at, + updatedBy: kbEntrySchema.updated_by, + users: + kbEntrySchema.users?.map((user) => ({ + id: user.id, + name: user.name, + })) ?? [], + ...(kbEntrySchema.metadata + ? { + metadata: { + kbResource: kbEntrySchema.metadata.kbResource, + source: kbEntrySchema.metadata.source, + required: kbEntrySchema.metadata.required, + }, + } + : {}), + namespace: kbEntrySchema.namespace, + text: kbEntrySchema.text, + ...(kbEntrySchema.vector + ? { + vector: { + modelId: kbEntrySchema.vector.model_id, + tokens: kbEntrySchema.vector.tokens, + }, + } + : {}), + }; + + return kbEntry; + }); +}; + +export const transformESToKnowledgeBase = ( + response: EsKnowledgeBaseEntrySchema[] +): KnowledgeBaseEntryResponse[] => { + return response.map((kbEntrySchema) => { + const kbEntry: KnowledgeBaseEntryResponse = { + timestamp: kbEntrySchema['@timestamp'], + id: kbEntrySchema.id, + createdAt: kbEntrySchema.created_at, + createdBy: kbEntrySchema.created_by, + updatedAt: kbEntrySchema.updated_at, + updatedBy: kbEntrySchema.updated_by, + users: + kbEntrySchema.users?.map((user) => ({ + id: user.id, + name: user.name, + })) ?? [], + ...(kbEntrySchema.metadata + ? { + metadata: { + kbResource: kbEntrySchema.metadata.kbResource, + source: kbEntrySchema.metadata.source, + required: kbEntrySchema.metadata.required, + }, + } + : {}), + namespace: kbEntrySchema.namespace, + text: kbEntrySchema.text, + ...(kbEntrySchema.vector + ? { + vector: { + modelId: kbEntrySchema.vector.model_id, + tokens: kbEntrySchema.vector.tokens, + }, + } + : {}), + }; + + return kbEntry; + }); +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts new file mode 100644 index 00000000000000..b3180d80223cea --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface EsKnowledgeBaseEntrySchema { + '@timestamp': string; + id: string; + created_at: string; + created_by: string; + updated_at: string; + updated_by: string; + users?: Array<{ + id?: string; + name?: string; + }>; + metadata?: { + kbResource: string; + source: string; + required: boolean; + }; + namespace: string; + text: string; + vector?: { + tokens: Record; + model_id: string; + }; +} + +export interface CreateKnowledgeBaseEntrySchema { + '@timestamp'?: string; + id?: string | undefined; + created_at: string; + created_by: string; + updated_at: string; + updated_by: string; + users: Array<{ + id?: string; + name?: string; + }>; + metadata?: { + kbResource: string; + source: string; + required: boolean; + }; + namespace: string; + text: string; + vector?: { + tokens: Record; + model_id: string; + }; +} diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts new file mode 100644 index 00000000000000..8503494cf15357 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts @@ -0,0 +1,111 @@ +/* + * 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 { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { once } from 'lodash/fp'; +import type { KibanaRequest } from '@kbn/core-http-server'; +import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import type { MlPluginSetup } from '@kbn/ml-plugin/server'; +import { knowledgeBaseIngestPipeline } from '../ai_assistant_data_clients/knowledge_base/ingest_pipeline'; +import { GetElser } from '../types'; + +/** + * Creates a function that returns the ELSER model ID + * + * @param ml + */ +export const createGetElserId = (ml: MlPluginSetup): GetElser => { + return once(async () => { + return ( + ( + await ml + // Force check to happen as internal user + .trainedModelsProvider({} as KibanaRequest, {} as SavedObjectsClientContract) + .getELSER() + ).model_id + ); + }); +}; + +interface PipelineExistsParams { + esClient: ElasticsearchClient; + id: string; +} + +/** + * Checks if the provided ingest pipeline exists in Elasticsearch + * + * @param params params + * @param params.esClient Elasticsearch client with privileges to check for ingest pipelines + * @param params.id ID of the ingest pipeline to check + * + * @returns Promise indicating whether the pipeline exists + */ +export const pipelineExists = async ({ esClient, id }: PipelineExistsParams): Promise => { + try { + const response = await esClient.ingest.getPipeline({ + id, + }); + return Object.keys(response).length > 0; + } catch (e) { + // The GET /_ingest/pipeline/{pipelineId} API returns an empty object w/ 404 Not Found. + return false; + } +}; + +interface CreatePipelineParams { + esClient: ElasticsearchClient; + id: string; + modelId: string; +} + +/** + * Create ingest pipeline for ELSER in Elasticsearch + * + * @param params params + * @param params.esClient Elasticsearch client with privileges to check for ingest pipelines + * @param params.id ID of the ingest pipeline + * @param params.modelId ID of the ELSER model + * + * @returns Promise indicating whether the pipeline was created + */ +export const createPipeline = async ({ + esClient, + id, + modelId, +}: CreatePipelineParams): Promise => { + try { + const response = await esClient.ingest.putPipeline( + knowledgeBaseIngestPipeline({ + id, + modelId, + }) + ); + + return response.acknowledged; + } catch (e) { + return false; + } +}; + +interface DeletePipelineParams { + esClient: ElasticsearchClient; + id: string; +} + +/** + * Delete ingest pipeline for ELSER in Elasticsearch + * + * @returns Promise indicating whether the pipeline was created + */ +export const deletePipeline = async ({ esClient, id }: DeletePipelineParams): Promise => { + const response = await esClient.ingest.deletePipeline({ + id, + }); + + return response.acknowledged; +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts index a96088b413dcf0..dbdc01dcf9e579 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts @@ -14,8 +14,10 @@ import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import { conversationsDataClientMock } from '../__mocks__/data_clients.mock'; import { AIAssistantConversationsDataClient } from '../ai_assistant_data_clients/conversations'; -import { AIAssistantService } from '.'; +import { AIAssistantService, AIAssistantServiceOpts } from '.'; import { retryUntil } from './create_resource_installation_helper.test'; +import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; +import type { MlPluginSetup } from '@kbn/ml-plugin/server'; jest.mock('../ai_assistant_data_clients/conversations', () => ({ AIAssistantConversationsDataClient: jest.fn(), @@ -95,6 +97,7 @@ const mockUser1 = { describe('AI Assistant Service', () => { let pluginStop$: Subject; + let assistantServiceOpts: AIAssistantServiceOpts; beforeEach(() => { jest.resetAllMocks(); @@ -107,6 +110,14 @@ describe('AI Assistant Service', () => { ); clusterClient.indices.getAlias.mockImplementation(async () => GetAliasResponse); clusterClient.indices.getDataStream.mockImplementation(async () => GetDataStreamResponse); + assistantServiceOpts = { + logger, + elasticsearchClientPromise: Promise.resolve(clusterClient), + pluginStop$, + kibanaVersion: '8.8.0', + ml: mlPluginMock.createSetupContract() as unknown as MlPluginSetup, // Missing SharedServices mock + taskManager: taskManagerMock.createSetup(), + }; }); afterEach(() => { @@ -116,13 +127,7 @@ describe('AI Assistant Service', () => { describe('AIAssistantService()', () => { test('should correctly initialize common resources', async () => { - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -140,13 +145,7 @@ describe('AI Assistant Service', () => { test('should log error and set initialized to false if creating/updating common component template throws error', async () => { clusterClient.cluster.putComponentTemplate.mockRejectedValueOnce(new Error('fail')); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil('error log called', async () => logger.error.mock.calls.length > 0); @@ -169,13 +168,7 @@ describe('AI Assistant Service', () => { }); test('should create new AIAssistantConversationsDataClient', async () => { - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -192,7 +185,7 @@ describe('AI Assistant Service', () => { logger, elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', }); @@ -201,13 +194,7 @@ describe('AI Assistant Service', () => { test('should retry initializing common resources if common resource initialization failed', async () => { clusterClient.cluster.putComponentTemplate.mockRejectedValueOnce(new Error('fail')); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil('error log called', async () => logger.error.mock.calls.length > 0); @@ -234,7 +221,7 @@ describe('AI Assistant Service', () => { logger, elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', }); @@ -259,13 +246,7 @@ describe('AI Assistant Service', () => { return { acknowledged: true }; }); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil('error log called', async () => logger.error.mock.calls.length > 0); @@ -298,7 +279,7 @@ describe('AI Assistant Service', () => { expect(AIAssistantConversationsDataClient).toHaveBeenCalledWith({ elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', logger, @@ -336,13 +317,7 @@ describe('AI Assistant Service', () => { mappings: {}, }, })); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -358,7 +333,7 @@ describe('AI Assistant Service', () => { expect(AIAssistantConversationsDataClient).toHaveBeenCalledWith({ elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', logger, @@ -397,13 +372,7 @@ describe('AI Assistant Service', () => { return SimulateTemplateResponse; }); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -431,7 +400,7 @@ describe('AI Assistant Service', () => { expect(AIAssistantConversationsDataClient).toHaveBeenCalledWith({ elasticsearchClientPromise: Promise.resolve(clusterClient), spaceId: 'default', - indexPatternsResorceName: '.kibana-elastic-ai-assistant-conversations', + indexPatternsResourceName: '.kibana-elastic-ai-assistant-conversations', currentUser: mockUser1, kibanaVersion: '8.8.0', logger, @@ -475,13 +444,7 @@ describe('AI Assistant Service', () => { }, })); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -523,13 +486,7 @@ describe('AI Assistant Service', () => { throw new Error(`fail ${++failCount}`); }); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil('error log called', async () => logger.error.mock.calls.length > 0, 1); @@ -574,13 +531,7 @@ describe('AI Assistant Service', () => { test('should return null if retrying common resources initialization fails again with same error', async () => { clusterClient.cluster.putComponentTemplate.mockRejectedValue(new Error('fail')); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil('error log called', async () => logger.error.mock.calls.length > 0); @@ -633,13 +584,7 @@ describe('AI Assistant Service', () => { })); clusterClient.indices.putIndexTemplate.mockRejectedValue(new Error('fail index template')); - assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -677,13 +622,7 @@ describe('AI Assistant Service', () => { .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) .mockResolvedValue({ acknowledged: true }); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -697,13 +636,7 @@ describe('AI Assistant Service', () => { .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) .mockResolvedValue({ acknowledged: true }); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -724,13 +657,7 @@ describe('AI Assistant Service', () => { .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) .mockResolvedValue({ acknowledged: true }); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -750,13 +677,7 @@ describe('AI Assistant Service', () => { .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) .mockResolvedValue({ acknowledged: true }); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', @@ -783,13 +704,7 @@ describe('AI Assistant Service', () => { hits: { hits: [], total: { value: 0 } }, }); - const assistantService = new AIAssistantService({ - logger, - elasticsearchClientPromise: Promise.resolve(clusterClient), - pluginStop$, - kibanaVersion: '8.8.0', - taskManager: taskManagerMock.createSetup(), - }); + const assistantService = new AIAssistantService(assistantServiceOpts); await retryUntil( 'AI Assistant service initialized', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 9cc3efb03e195a..619d9e9bca256f 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -9,10 +9,11 @@ import { DataStreamSpacesAdapter, FieldMap } from '@kbn/data-stream-adapter'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import type { Logger, ElasticsearchClient } from '@kbn/core/server'; import type { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; +import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { Subject } from 'rxjs'; import { getDefaultAnonymizationFields } from '../../common/anonymization'; -import { AssistantResourceNames } from '../types'; +import { AssistantResourceNames, GetElser } from '../types'; import { AIAssistantConversationsDataClient } from '../ai_assistant_data_clients/conversations'; import { InitializationPromise, @@ -25,6 +26,9 @@ import { conversationsFieldMap } from '../ai_assistant_data_clients/conversation import { assistantPromptsFieldMap } from '../ai_assistant_data_clients/prompts/field_maps_configuration'; import { assistantAnonymizationFieldsFieldMap } from '../ai_assistant_data_clients/anonymization_fields/field_maps_configuration'; import { AIAssistantDataClient } from '../ai_assistant_data_clients'; +import { knowledgeBaseFieldMap } from '../ai_assistant_data_clients/knowledge_base/field_maps_configuration'; +import { AIAssistantKnowledgeBaseDataClient } from '../ai_assistant_data_clients/knowledge_base'; +import { createGetElserId, createPipeline, pipelineExists } from './helpers'; const TOTAL_FIELDS_LIMIT = 2500; @@ -32,10 +36,11 @@ function getResourceName(resource: string) { return `.kibana-elastic-ai-assistant-${resource}`; } -interface AIAssistantServiceOpts { +export interface AIAssistantServiceOpts { logger: Logger; kibanaVersion: string; elasticsearchClientPromise: Promise; + ml: MlPluginSetup; taskManager: TaskManagerSetupContract; pluginStop$: Subject; } @@ -47,7 +52,7 @@ export interface CreateAIAssistantClientParams { } export type CreateDataStream = (params: { - resource: 'conversations' | 'prompts' | 'anonymizationFields'; + resource: 'anonymizationFields' | 'conversations' | 'knowledgeBase' | 'prompts'; fieldMap: FieldMap; kibanaVersion: string; spaceId?: string; @@ -55,20 +60,31 @@ export type CreateDataStream = (params: { export class AIAssistantService { private initialized: boolean; + // Temporary 'feature flag' to determine if we should initialize the knowledge base, toggled when accessing data client + private initializeKnowledgeBase: boolean = false; private isInitializing: boolean = false; + private getElserId: GetElser; private conversationsDataStream: DataStreamSpacesAdapter; + private knowledgeBaseDataStream: DataStreamSpacesAdapter; private promptsDataStream: DataStreamSpacesAdapter; private anonymizationFieldsDataStream: DataStreamSpacesAdapter; private resourceInitializationHelper: ResourceInstallationHelper; private initPromise: Promise; + private isKBSetupInProgress: boolean = false; constructor(private readonly options: AIAssistantServiceOpts) { this.initialized = false; + this.getElserId = createGetElserId(options.ml); this.conversationsDataStream = this.createDataStream({ resource: 'conversations', kibanaVersion: options.kibanaVersion, fieldMap: conversationsFieldMap, }); + this.knowledgeBaseDataStream = this.createDataStream({ + resource: 'knowledgeBase', + kibanaVersion: options.kibanaVersion, + fieldMap: knowledgeBaseFieldMap, + }); this.promptsDataStream = this.createDataStream({ resource: 'prompts', kibanaVersion: options.kibanaVersion, @@ -93,6 +109,13 @@ export class AIAssistantService { return this.initialized; } + public getIsKBSetupInProgress() { + return this.isKBSetupInProgress; + } + public setIsKBSetupInProgress(isInProgress: boolean) { + this.isKBSetupInProgress = isInProgress; + } + private createDataStream: CreateDataStream = ({ resource, kibanaVersion, fieldMap }) => { const newDataStream = new DataStreamSpacesAdapter(this.resourceNames.aliases[resource], { kibanaVersion, @@ -107,6 +130,19 @@ export class AIAssistantService { newDataStream.setIndexTemplate({ name: this.resourceNames.indexTemplate[resource], componentTemplateRefs: [this.resourceNames.componentTemplate[resource]], + // Apply `default_pipeline` if pipeline exists for resource + ...(resource in this.resourceNames.pipelines + ? { + template: { + settings: { + 'index.default_pipeline': + this.resourceNames.pipelines[ + resource as keyof typeof this.resourceNames.pipelines + ], + }, + }, + } + : {}), }); return newDataStream; @@ -124,6 +160,36 @@ export class AIAssistantService { pluginStop$: this.options.pluginStop$, }); + if (this.initializeKnowledgeBase) { + await this.knowledgeBaseDataStream.install({ + esClient, + logger: this.options.logger, + pluginStop$: this.options.pluginStop$, + }); + + // TODO: Pipeline creation is temporary as we'll be moving to semantic_text field once available in ES + const pipelineCreated = await pipelineExists({ + esClient, + id: this.resourceNames.pipelines.knowledgeBase, + }); + if (!pipelineCreated) { + this.options.logger.debug( + `Installing ingest pipeline - ${this.resourceNames.pipelines.knowledgeBase}` + ); + const response = await createPipeline({ + esClient, + id: this.resourceNames.pipelines.knowledgeBase, + modelId: await this.getElserId(), + }); + + this.options.logger.debug(`Installed ingest pipeline: ${response}`); + } else { + this.options.logger.debug( + `Ingest pipeline already exists - ${this.resourceNames.pipelines.knowledgeBase}` + ); + } + } + await this.promptsDataStream.install({ esClient, logger: this.options.logger, @@ -149,30 +215,30 @@ export class AIAssistantService { private readonly resourceNames: AssistantResourceNames = { componentTemplate: { conversations: getResourceName('component-template-conversations'), + knowledgeBase: getResourceName('component-template-knowledge-base'), prompts: getResourceName('component-template-prompts'), anonymizationFields: getResourceName('component-template-anonymization-fields'), - kb: getResourceName('component-template-kb'), }, aliases: { conversations: getResourceName('conversations'), + knowledgeBase: getResourceName('knowledge-base'), prompts: getResourceName('prompts'), anonymizationFields: getResourceName('anonymization-fields'), - kb: getResourceName('kb'), }, indexPatterns: { conversations: getResourceName('conversations*'), + knowledgeBase: getResourceName('knowledge-base*'), prompts: getResourceName('prompts*'), anonymizationFields: getResourceName('anonymization-fields*'), - kb: getResourceName('kb*'), }, indexTemplate: { conversations: getResourceName('index-template-conversations'), + knowledgeBase: getResourceName('index-template-knowledge-base'), prompts: getResourceName('index-template-prompts'), anonymizationFields: getResourceName('index-template-anonymization-fields'), - kb: getResourceName('index-template-kb'), }, pipelines: { - kb: getResourceName('kb-ingest-pipeline'), + knowledgeBase: getResourceName('ingest-pipeline-knowledge-base'), }, }; @@ -182,7 +248,7 @@ export class AIAssistantService { opts.spaceId ); - // If space evel resources initialization failed, retry + // If space level resources initialization failed, retry if (!initialized && error) { let initRetryPromise: Promise | undefined; @@ -236,11 +302,42 @@ export class AIAssistantService { elasticsearchClientPromise: this.options.elasticsearchClientPromise, spaceId: opts.spaceId, kibanaVersion: this.options.kibanaVersion, - indexPatternsResorceName: this.resourceNames.aliases.conversations, + indexPatternsResourceName: this.resourceNames.aliases.conversations, currentUser: opts.currentUser, }); } + public async createAIAssistantKnowledgeBaseDataClient( + opts: CreateAIAssistantClientParams & { initializeKnowledgeBase: boolean } + ): Promise { + // Note: Due to plugin lifecycle and feature flag registration timing, we need to pass in the feature flag here + // Remove this param and initialization when the `assistantKnowledgeBaseByDefault` feature flag is removed + if (opts.initializeKnowledgeBase) { + this.initializeKnowledgeBase = true; + await this.initializeResources(); + } + + const res = await this.checkResourcesInstallation(opts); + + if (res === null) { + return null; + } + + return new AIAssistantKnowledgeBaseDataClient({ + logger: this.options.logger.get('knowledgeBase'), + currentUser: opts.currentUser, + elasticsearchClientPromise: this.options.elasticsearchClientPromise, + indexPatternsResourceName: this.resourceNames.aliases.knowledgeBase, + ingestPipelineResourceName: this.resourceNames.pipelines.knowledgeBase, + getElserId: this.getElserId, + getIsKBSetupInProgress: this.getIsKBSetupInProgress.bind(this), + kibanaVersion: this.options.kibanaVersion, + ml: this.options.ml, + setIsKBSetupInProgress: this.setIsKBSetupInProgress.bind(this), + spaceId: opts.spaceId, + }); + } + public async createAIAssistantPromptsDataClient( opts: CreateAIAssistantClientParams ): Promise { @@ -255,7 +352,7 @@ export class AIAssistantService { elasticsearchClientPromise: this.options.elasticsearchClientPromise, spaceId: opts.spaceId, kibanaVersion: this.options.kibanaVersion, - indexPatternsResorceName: this.resourceNames.aliases.prompts, + indexPatternsResourceName: this.resourceNames.aliases.prompts, currentUser: opts.currentUser, }); } @@ -274,7 +371,7 @@ export class AIAssistantService { elasticsearchClientPromise: this.options.elasticsearchClientPromise, spaceId: opts.spaceId, kibanaVersion: this.options.kibanaVersion, - indexPatternsResorceName: this.resourceNames.aliases.anonymizationFields, + indexPatternsResourceName: this.resourceNames.aliases.anonymizationFields, currentUser: opts.currentUser, }); } @@ -308,6 +405,15 @@ export class AIAssistantService { await this.conversationsDataStream.installSpace(spaceId); } + if (this.initializeKnowledgeBase) { + const knowledgeBaseIndexName = await this.knowledgeBaseDataStream.getInstalledSpaceName( + spaceId + ); + if (!knowledgeBaseIndexName) { + await this.knowledgeBaseDataStream.installSpace(spaceId); + } + } + const promptsIndexName = await this.promptsDataStream.getInstalledSpaceName(spaceId); if (!promptsIndexName) { await this.promptsDataStream.installSpace(spaceId); @@ -334,7 +440,7 @@ export class AIAssistantService { elasticsearchClientPromise: this.options.elasticsearchClientPromise, spaceId, kibanaVersion: this.options.kibanaVersion, - indexPatternsResorceName: this.resourceNames.aliases.anonymizationFields, + indexPatternsResourceName: this.resourceNames.aliases.anonymizationFields, currentUser: null, }); diff --git a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts index 83b42272750666..3cae3972c8bf65 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { v4 as uuidV4 } from 'uuid'; import type { BulkOperationContainer, BulkOperationType, @@ -241,7 +240,8 @@ export class DocumentsDataWriter implements DocumentsDataWriter { ): Promise => { const documentCreateBody = params.documentsToCreate ? params.documentsToCreate.flatMap((document) => [ - { create: { _index: this.options.index, _id: uuidV4() } }, + // Do not pre-gen _id for bulk create operations to avoid `version_conflict_engine_exception` + { create: { _index: this.options.index } }, document, ]) : []; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts index ae6540de5e2713..86791cec5f5ce4 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts @@ -34,6 +34,7 @@ import { KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT, KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT, } from '../../telemetry/event_based_telemetry'; +import { AIAssistantKnowledgeBaseDataClient } from '../../../ai_assistant_data_clients/knowledge_base'; interface CreatePipelineParams { id?: string; @@ -64,8 +65,8 @@ export const TERMS_QUERY_SIZE = 10000; export class ElasticsearchStore extends VectorStore { declare FilterType: QueryDslQueryContainer; - // Note: convert to { Client } from '@elastic/elasticsearch' for langchain contribution (removing Kibana dependency) private readonly esClient: ElasticsearchClient; + private readonly kbDataClient: AIAssistantKnowledgeBaseDataClient | undefined; private readonly index: string; private readonly logger: Logger; private readonly telemetry: AnalyticsServiceSetup; @@ -82,7 +83,8 @@ export class ElasticsearchStore extends VectorStore { logger: Logger, telemetry: AnalyticsServiceSetup, model?: string, - kbResource?: string | undefined + kbResource?: string | undefined, + kbDataClient?: AIAssistantKnowledgeBaseDataClient ) { super(new ElasticsearchEmbeddings(logger), { esClient, index }); this.esClient = esClient; @@ -91,6 +93,7 @@ export class ElasticsearchStore extends VectorStore { this.telemetry = telemetry; this.model = model ?? '.elser_model_2'; this.kbResource = kbResource ?? ESQL_RESOURCE; + this.kbDataClient = kbDataClient; } /** @@ -105,14 +108,16 @@ export class ElasticsearchStore extends VectorStore { documents: Document[], options?: Record ): Promise => { + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled + // Once removed replace addDocuments() w/ addDocumentsViaDataClient() + if (this.kbDataClient != null) { + return this.addDocumentsViaDataClient(documents, options); + } + const pipelineExists = await this.pipelineExists(); if (!pipelineExists) { await this.createPipeline(); } - const indexExists = await this.indexExists(); - if (!indexExists) { - await this.createIndex(); - } const operations = documents.flatMap(({ pageContent, metadata }) => [ { index: { _index: this.index, _id: uuid.v4() } }, @@ -139,6 +144,26 @@ export class ElasticsearchStore extends VectorStore { } }; + addDocumentsViaDataClient = async ( + documents: Document[], + options?: Record + ): Promise => { + if (!this.kbDataClient) { + this.logger.error('No kbDataClient provided'); + return []; + } + + try { + const response = await this.kbDataClient.addKnowledgeBaseDocuments({ + documents, + }); + return response.map((doc) => doc.id); + } catch (e) { + this.logger.error(`Error loading data into KB\n ${e}`); + return []; + } + }; + /** * Add vectors to the store. Returns a list of document IDs. * @@ -317,6 +342,13 @@ export class ElasticsearchStore extends VectorStore { * @returns Promise indicating whether the index was created */ deleteIndex = async (index?: string): Promise => { + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled + // We won't be supporting delete operations for the KB data stream going forward, so this can be removed along with the FF + if (this.kbDataClient != null) { + const response = await this.esClient.indices.deleteDataStream({ name: index ?? this.index }); + return response.acknowledged; + } + const response = await this.esClient.indices.delete({ index: index ?? this.index, }); @@ -332,8 +364,12 @@ export class ElasticsearchStore extends VectorStore { */ pipelineExists = async (pipelineId?: string): Promise => { try { + const id = + pipelineId ?? + this.kbDataClient?.options.ingestPipelineResourceName ?? + KNOWLEDGE_BASE_INGEST_PIPELINE; const response = await this.esClient.ingest.getPipeline({ - id: KNOWLEDGE_BASE_INGEST_PIPELINE, + id, }); return Object.keys(response).length > 0; } catch (e) { @@ -349,7 +385,10 @@ export class ElasticsearchStore extends VectorStore { */ createPipeline = async ({ id, description }: CreatePipelineParams = {}): Promise => { const response = await this.esClient.ingest.putPipeline({ - id: id ?? KNOWLEDGE_BASE_INGEST_PIPELINE, + id: + id ?? + this.kbDataClient?.options.ingestPipelineResourceName ?? + KNOWLEDGE_BASE_INGEST_PIPELINE, description: description ?? 'Embedding pipeline for Elastic AI Assistant ELSER Knowledge Base', processors: [ @@ -381,7 +420,10 @@ export class ElasticsearchStore extends VectorStore { */ deletePipeline = async (pipelineId?: string): Promise => { const response = await this.esClient.ingest.deletePipeline({ - id: pipelineId ?? KNOWLEDGE_BASE_INGEST_PIPELINE, + id: + pipelineId ?? + this.kbDataClient?.options.ingestPipelineResourceName ?? + KNOWLEDGE_BASE_INGEST_PIPELINE, }); return response.acknowledged; @@ -395,12 +437,17 @@ export class ElasticsearchStore extends VectorStore { */ async isModelInstalled(modelId?: string): Promise { try { + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled + if (this.kbDataClient != null) { + // esStore.isModelInstalled() is actually checking if the model is deployed, not installed, so do that instead + return this.kbDataClient.isModelDeployed(); + } + const getResponse = await this.esClient.ml.getTrainedModelsStats({ model_id: modelId ?? this.model, }); this.logger.debug(`modelId: ${modelId}`); - this.logger.debug(`getResponse: ${JSON.stringify(getResponse, null, 2)}`); // For standardized way of checking deployment status see: https://github.com/elastic/elasticsearch/issues/106986 const isReadyESS = (stats: MlTrainedModelStats) => diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts index 7e7d5cf561d5ea..42ffad4779d1ca 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts @@ -14,13 +14,15 @@ import { initializeAgentExecutorWithOptions } from 'langchain/agents'; import { mockActionResponse } from '../../../__mocks__/action_result_data'; import { langChainMessages } from '../../../__mocks__/lang_chain_messages'; -import { ESQL_RESOURCE } from '../../../routes/knowledge_base/constants'; +import { KNOWLEDGE_BASE_INDEX_PATTERN } from '../../../routes/knowledge_base/constants'; import { callAgentExecutor } from '.'; import { PassThrough, Stream } from 'stream'; import { ActionsClientChatOpenAI, ActionsClientLlm, } from '@kbn/elastic-assistant-common/impl/language_models'; +import { AgentExecutorParams } from '../executors/types'; +import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store'; jest.mock('@kbn/elastic-assistant-common/impl/language_models', () => ({ ActionsClientChatOpenAI: jest.fn(), @@ -85,18 +87,23 @@ const mockActions: ActionsPluginStart = {} as ActionsPluginStart; const mockLogger = loggerMock.create(); const mockTelemetry = coreMock.createSetup().analytics; const esClientMock = elasticsearchServiceMock.createScopedClusterClient().asCurrentUser; -const defaultProps = { +const esStoreMock = new ElasticsearchStore( + esClientMock, + KNOWLEDGE_BASE_INDEX_PATTERN, + mockLogger, + mockTelemetry +); +const defaultProps: AgentExecutorParams = { actions: mockActions, isEnabledKnowledgeBase: true, connectorId: mockConnectorId, esClient: esClientMock, + esStore: esStoreMock, llmType: 'openai', langChainMessages, logger: mockLogger, onNewReplacements: jest.fn(), request: mockRequest, - kbResource: ESQL_RESOURCE, - telemetry: mockTelemetry, replacements: {}, }; const executorMock = initializeAgentExecutorWithOptions as jest.Mock; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts index f8e2f2426bf892..9c1ea6d5c36d54 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts @@ -17,8 +17,6 @@ import { ActionsClientLlm, } from '@kbn/elastic-assistant-common/impl/language_models'; import { getDefaultArguments } from '@kbn/elastic-assistant-common/impl/language_models/constants'; -import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store'; -import { KNOWLEDGE_BASE_INDEX_PATTERN } from '../../../routes/knowledge_base/constants'; import { AgentExecutor } from '../executors/types'; import { withAssistantSpan } from '../tracers/with_assistant_span'; import { APMTracer } from '../tracers/apm_tracer'; @@ -38,9 +36,8 @@ export const callAgentExecutor: AgentExecutor = async ({ isEnabledKnowledgeBase, assistantTools = [], connectorId, - elserId, esClient, - kbResource, + esStore, langChainMessages, llmType, logger, @@ -50,7 +47,6 @@ export const callAgentExecutor: AgentExecutor = async ({ replacements, request, size, - telemetry, traceOptions, }) => { // TODO implement llmClass for bedrock streaming @@ -87,16 +83,6 @@ export const callAgentExecutor: AgentExecutor = async ({ returnMessages: true, }); - // ELSER backed ElasticsearchStore for Knowledge Base - const esStore = new ElasticsearchStore( - esClient, - KNOWLEDGE_BASE_INDEX_PATTERN, - logger, - telemetry, - elserId, - kbResource - ); - const modelExists = await esStore.isModelInstalled(); // Create a chain that uses the ELSER backed ElasticsearchStore, override k=10 for esql query generation for now diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts index 2b3d07708e2e1e..2b5ef7350e6286 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts @@ -11,8 +11,6 @@ import { BufferMemory, ChatMessageHistory } from 'langchain/memory'; import { ChainTool } from 'langchain/tools/chain'; import { ActionsClientLlm } from '@kbn/elastic-assistant-common/impl/language_models'; -import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store'; -import { KNOWLEDGE_BASE_INDEX_PATTERN } from '../../../routes/knowledge_base/constants'; import { AgentExecutor } from './types'; import { withAssistantSpan } from '../tracers/with_assistant_span'; import { APMTracer } from '../tracers/apm_tracer'; @@ -30,13 +28,11 @@ export const callOpenAIFunctionsExecutor: AgentExecutor = async ({ actions, connectorId, esClient, + esStore, langChainMessages, llmType, logger, request, - elserId, - kbResource, - telemetry, traceOptions, }) => { const llm = new ActionsClientLlm({ @@ -59,16 +55,6 @@ export const callOpenAIFunctionsExecutor: AgentExecutor = async ({ returnMessages: true, }); - // ELSER backed ElasticsearchStore for Knowledge Base - const esStore = new ElasticsearchStore( - esClient, - KNOWLEDGE_BASE_INDEX_PATTERN, - logger, - telemetry, - elserId, - kbResource - ); - const modelExists = await esStore.isModelInstalled(); if (!modelExists) { throw new Error( diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index ce2833fa144804..8acd7f4fcdde24 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -11,12 +11,12 @@ import { BaseMessage } from '@langchain/core/messages'; import { Logger } from '@kbn/logging'; import { KibanaRequest, ResponseHeaders } from '@kbn/core-http-server'; import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain'; -import type { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { ExecuteConnectorRequestBody, Message, Replacements } from '@kbn/elastic-assistant-common'; import { StreamResponseWithHeaders } from '@kbn/ml-response-stream/server'; import { AnonymizationFieldResponse } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; import { ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; +import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store'; export interface AgentExecutorParams { abortSignal?: AbortSignal; @@ -27,7 +27,7 @@ export interface AgentExecutorParams { assistantTools?: AssistantTool[]; connectorId: string; esClient: ElasticsearchClient; - kbResource: string | undefined; + esStore: ElasticsearchStore; langChainMessages: BaseMessage[]; llmType?: string; logger: Logger; @@ -41,9 +41,7 @@ export interface AgentExecutorParams { ) => Promise; request: KibanaRequest; size?: number; - elserId?: string; traceOptions?: TraceOptions; - telemetry: AnalyticsServiceSetup; } export interface StaticReturnType { diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index 53b05857beb4b7..7a092928ce99aa 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -24,6 +24,7 @@ import { RequestContextFactory } from './routes/request_context_factory'; import { PLUGIN_ID } from '../common/constants'; import { registerRoutes } from './routes/register_routes'; import { appContextService } from './services/app_context'; +import { createGetElserId } from './ai_assistant_service/helpers'; export class ElasticAssistantPlugin implements @@ -53,6 +54,7 @@ export class ElasticAssistantPlugin this.assistantService = new AIAssistantService({ logger: this.logger.get('service'), + ml: plugins.ml, taskManager: plugins.taskManager, kibanaVersion: this.kibanaVersion, elasticsearchClientPromise: core @@ -76,8 +78,8 @@ export class ElasticAssistantPlugin ); events.forEach((eventConfig) => core.analytics.registerEventType(eventConfig)); - // this.assistantService registerKBTask - registerRoutes(router, this.logger, plugins); + const getElserId = createGetElserId(plugins.ml); + registerRoutes(router, this.logger, getElserId); return { actions: plugins.actions, getRegisteredFeatures: (pluginName: string) => { diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.test.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.test.ts index 0555b313f27f92..b3fb27fa835c1f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.test.ts @@ -9,7 +9,8 @@ import { postEvaluateRoute } from './post_evaluate'; import { serverMock } from '../../__mocks__/server'; import { requestContextMock } from '../../__mocks__/request_context'; import { getPostEvaluateRequest } from '../../__mocks__/request'; -import type { +import { + defaultAssistantFeatures, PostEvaluateRequestBodyInput, PostEvaluateRequestQueryInput, } from '@kbn/elastic-assistant-common'; @@ -45,6 +46,7 @@ describe('Post Evaluate Route', () => { describe('Capabilities', () => { it('returns a 404 if evaluate feature is not registered', async () => { context.elasticAssistant.getRegisteredFeatures.mockReturnValueOnce({ + ...defaultAssistantFeatures, assistantModelEvaluation: false, }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index d1bf9dfa26ab1d..46a39533708262 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -19,7 +19,7 @@ import { } from '@kbn/elastic-assistant-common'; import { ActionsClientLlm } from '@kbn/elastic-assistant-common/impl/language_models'; import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; -import { ESQL_RESOURCE } from '../knowledge_base/constants'; +import { ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from '../knowledge_base/constants'; import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantRequestHandlerContext, GetElser } from '../../types'; import { EVALUATE } from '../../../common/constants'; @@ -37,6 +37,7 @@ import { DEFAULT_PLUGIN_NAME, getPluginNameFromRequest } from '../helpers'; * and reference your specific AgentExecutor function */ import { AGENT_EXECUTOR_MAP } from '../../lib/langchain/executors'; +import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; const DEFAULT_SIZE = 20; @@ -136,7 +137,7 @@ export const postEvaluateRoute = ( const esClient = (await context.core).elasticsearch.client.asCurrentUser; // Default ELSER model - const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const elserId = await getElser(); // Skeleton request from route to pass to the agents // params will be passed to the actions executor @@ -157,6 +158,27 @@ export const postEvaluateRoute = ( }, }; + // Create an ElasticsearchStore for KB interactions + // Setup with kbDataClient if `enableKnowledgeBaseByDefault` FF is enabled + const enableKnowledgeBaseByDefault = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; + const kbDataClient = enableKnowledgeBaseByDefault + ? (await assistantContext.getAIAssistantKnowledgeBaseDataClient(false)) ?? undefined + : undefined; + const kbIndex = + enableKnowledgeBaseByDefault && kbDataClient != null + ? kbDataClient.indexTemplateAndPattern.alias + : KNOWLEDGE_BASE_INDEX_PATTERN; + const esStore = new ElasticsearchStore( + esClient, + kbIndex, + logger, + telemetry, + elserId, + ESQL_RESOURCE, + kbDataClient + ); + // Create an array of executor functions to call in batches // One for each connector/model + agent combination // Hoist `langChainMessages` so they can be batched by dataset.input in the evaluator @@ -175,14 +197,12 @@ export const postEvaluateRoute = ( assistantTools, connectorId, esClient, - elserId, + esStore, isStream: false, langChainMessages, llmType: 'openai', logger, request: skeletonRequest, - kbResource: ESQL_RESOURCE, - telemetry, traceOptions: { exampleId, projectName, diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.test.ts index 0443bd1b3eedd0..ad130cddc55606 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.test.ts @@ -36,7 +36,7 @@ describe('Delete Knowledge Base Route', () => { }); test('returns 500 if error is thrown when deleting resources', async () => { - context.core.elasticsearch.client.asCurrentUser.indices.delete.mockRejectedValue( + context.core.elasticsearch.client.asInternalUser.indices.delete.mockRejectedValue( new Error('Test error') ); const response = await server.inject( diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts index 6886b56f7ef328..6e81738a7376f0 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts @@ -8,7 +8,10 @@ import { IRouter, KibanaRequest } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; -import { ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION } from '@kbn/elastic-assistant-common'; +import { + ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, +} from '@kbn/elastic-assistant-common'; import { DeleteKnowledgeBaseRequestParams, DeleteKnowledgeBaseResponse, @@ -16,9 +19,10 @@ import { import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantRequestHandlerContext } from '../../types'; -import { KNOWLEDGE_BASE } from '../../../common/constants'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './constants'; +import { DEFAULT_PLUGIN_NAME, getPluginNameFromRequest } from '../helpers'; +import { getKbResource } from './get_kb_resource'; /** * Delete Knowledge Base index, pipeline, and resources (collection of documents) @@ -30,11 +34,9 @@ export const deleteKnowledgeBaseRoute = ( router.versioned .delete({ access: 'internal', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, options: { - // Note: Relying on current user privileges to scope an esClient. - // Add `access:kbnElasticAssistant` to limit API access to only users with assistant privileges - tags: [], + tags: ['access:elasticAssistant'], }, }) .addVersion( @@ -51,22 +53,43 @@ export const deleteKnowledgeBaseRoute = ( const assistantContext = await context.elasticAssistant; const logger = assistantContext.logger; const telemetry = assistantContext.telemetry; + const pluginName = getPluginNameFromRequest({ + request, + defaultPluginName: DEFAULT_PLUGIN_NAME, + logger, + }); + const enableKnowledgeBaseByDefault = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; try { - const kbResource = - request.params.resource != null - ? decodeURIComponent(request.params.resource) - : undefined; + const kbResource = getKbResource(request); - // Get a scoped esClient for deleting the Knowledge Base index, pipeline, and documents - const esClient = (await context.core).elasticsearch.client.asCurrentUser; - const esStore = new ElasticsearchStore( + const esClient = (await context.core).elasticsearch.client.asInternalUser; + let esStore = new ElasticsearchStore( esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, telemetry ); + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled, only need an esStore w/ kbDataClient + if (enableKnowledgeBaseByDefault) { + const knowledgeBaseDataClient = + await assistantContext.getAIAssistantKnowledgeBaseDataClient(false); + if (!knowledgeBaseDataClient) { + return response.custom({ body: { success: false }, statusCode: 500 }); + } + esStore = new ElasticsearchStore( + esClient, + knowledgeBaseDataClient.indexTemplateAndPattern.alias, + logger, + telemetry, + 'elserId', // Not needed for delete ops + kbResource, + knowledgeBaseDataClient + ); + } + if (kbResource === ESQL_RESOURCE) { // For now, tearing down the Knowledge Base is fine, but will want to support removing specific assets based // on resource name or document query diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts new file mode 100644 index 00000000000000..0c31974a20785f --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts @@ -0,0 +1,76 @@ +/* + * 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 { IKibanaResponse } from '@kbn/core/server'; +import { transformError } from '@kbn/securitysolution-es-utils'; +import { + API_VERSIONS, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL, +} from '@kbn/elastic-assistant-common'; +import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; +import { + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryResponse, +} from '@kbn/elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen'; +import { ElasticAssistantPluginRouter } from '../../../types'; +import { buildResponse } from '../../utils'; +import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../../helpers'; + +export const createKnowledgeBaseEntryRoute = (router: ElasticAssistantPluginRouter): void => { + router.versioned + .post({ + access: 'public', + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL, + + options: { + tags: ['access:elasticAssistant'], + }, + }) + .addVersion( + { + version: API_VERSIONS.public.v1, + validate: { + request: { + body: buildRouteValidationWithZod(KnowledgeBaseEntryCreateProps), + }, + }, + }, + async (context, request, response): Promise> => { + const assistantResponse = buildResponse(response); + try { + const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']); + const license = ctx.licensing.license; + if (!hasAIAssistantLicense(license)) { + return response.forbidden({ + body: { + message: UPGRADE_LICENSE_MESSAGE, + }, + }); + } + + const authenticatedUser = ctx.elasticAssistant.getCurrentUser(); + if (authenticatedUser == null) { + return assistantResponse.error({ + body: `Authenticated user not found`, + statusCode: 401, + }); + } + + return assistantResponse.error({ + body: `knowledge base entry was not created`, + statusCode: 400, + }); + } catch (err) { + const error = transformError(err as Error); + return assistantResponse.error({ + body: error.message, + statusCode: error.statusCode, + }); + } + } + ); +}; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts index f37f2a3ab2882a..ba8992d9c19bdc 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts @@ -10,6 +10,7 @@ import { serverMock } from '../../__mocks__/server'; import { requestContextMock } from '../../__mocks__/request_context'; import { getGetKnowledgeBaseStatusRequest } from '../../__mocks__/request'; import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Get Knowledge Base Status Route', () => { let server: ReturnType; @@ -19,10 +20,18 @@ describe('Get Knowledge Base Status Route', () => { clients.core.elasticsearch.client = elasticsearchServiceMock.createScopedClusterClient(); const mockGetElser = jest.fn().mockResolvedValue('.elser_model_2'); + const mockUser = { + username: 'my_username', + authentication_realm: { + type: 'my_realm_type', + name: 'my_realm_name', + }, + } as AuthenticatedUser; beforeEach(() => { server = serverMock.create(); ({ context } = requestContextMock.createTools()); + context.elasticAssistant.getCurrentUser.mockReturnValue(mockUser); getKnowledgeBaseStatusRoute(server.router, mockGetElser); }); @@ -37,7 +46,7 @@ describe('Get Knowledge Base Status Route', () => { }); test('returns 500 if error is thrown in checking kb status', async () => { - context.core.elasticsearch.client.asCurrentUser.indices.exists.mockRejectedValue( + context.core.elasticsearch.client.asInternalUser.indices.exists.mockRejectedValue( new Error('Test error') ); const response = await server.inject( diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts index c7d83e8c244014..a8d2e96227d60b 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts @@ -9,6 +9,7 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import { ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, ReadKnowledgeBaseRequestParams, ReadKnowledgeBaseResponse, } from '@kbn/elastic-assistant-common'; @@ -17,9 +18,9 @@ import { KibanaRequest } from '@kbn/core/server'; import { getKbResource } from './get_kb_resource'; import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantPluginRouter, GetElser } from '../../types'; -import { KNOWLEDGE_BASE } from '../../../common/constants'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_DOCS_LOADED_QUERY, ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './constants'; +import { DEFAULT_PLUGIN_NAME, getPluginNameFromRequest } from '../helpers'; /** * Get the status of the Knowledge Base index, pipeline, and resources (collection of documents) @@ -34,11 +35,9 @@ export const getKnowledgeBaseStatusRoute = ( router.versioned .get({ access: 'internal', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, options: { - // Note: Relying on current user privileges to scope an esClient. - // Add `access:kbnElasticAssistant` to limit API access to only users with assistant privileges - tags: [], + tags: ['access:elasticAssistant'], }, }) .addVersion( @@ -57,11 +56,10 @@ export const getKnowledgeBaseStatusRoute = ( const telemetry = assistantContext.telemetry; try { - // Get a scoped esClient for finding the status of the Knowledge Base index, pipeline, and documents - const esClient = (await context.core).elasticsearch.client.asCurrentUser; - const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const esClient = (await context.core).elasticsearch.client.asInternalUser; + const elserId = await getElser(); const kbResource = getKbResource(request); - const esStore = new ElasticsearchStore( + let esStore = new ElasticsearchStore( esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, @@ -70,6 +68,37 @@ export const getKnowledgeBaseStatusRoute = ( kbResource ); + const pluginName = getPluginNameFromRequest({ + request, + defaultPluginName: DEFAULT_PLUGIN_NAME, + logger, + }); + const enableKnowledgeBaseByDefault = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; + + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled + let isSetupInProgress = false; + if (enableKnowledgeBaseByDefault) { + const kbDataClient = await assistantContext.getAIAssistantKnowledgeBaseDataClient( + false + ); + if (!kbDataClient) { + return response.custom({ body: { success: false }, statusCode: 500 }); + } + + // Use old status checks by overriding esStore to use kbDataClient + esStore = new ElasticsearchStore( + esClient, + kbDataClient.indexTemplateAndPattern.alias, + logger, + telemetry, + elserId, + kbResource, + kbDataClient + ); + isSetupInProgress = kbDataClient.isSetupInProgress; + } + const indexExists = await esStore.indexExists(); const pipelineExists = await esStore.pipelineExists(); const modelExists = await esStore.isModelInstalled(elserId); @@ -77,6 +106,7 @@ export const getKnowledgeBaseStatusRoute = ( const body: ReadKnowledgeBaseResponse = { elser_exists: modelExists, index_exists: indexExists, + is_setup_in_progress: isSetupInProgress, pipeline_exists: pipelineExists, }; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts index ceb5f1b3879f63..547923b5c0d17b 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts @@ -10,6 +10,7 @@ import { serverMock } from '../../__mocks__/server'; import { requestContextMock } from '../../__mocks__/request_context'; import { getPostKnowledgeBaseRequest } from '../../__mocks__/request'; import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Post Knowledge Base Route', () => { let server: ReturnType; @@ -19,10 +20,18 @@ describe('Post Knowledge Base Route', () => { clients.core.elasticsearch.client = elasticsearchServiceMock.createScopedClusterClient(); const mockGetElser = jest.fn().mockResolvedValue('.elser_model_2'); + const mockUser = { + username: 'my_username', + authentication_realm: { + type: 'my_realm_type', + name: 'my_realm_name', + }, + } as AuthenticatedUser; beforeEach(() => { server = serverMock.create(); ({ context } = requestContextMock.createTools()); + context.elasticAssistant.getCurrentUser.mockReturnValue(mockUser); postKnowledgeBaseRoute(server.router, mockGetElser); }); @@ -38,7 +47,7 @@ describe('Post Knowledge Base Route', () => { }); test('returns 500 if error is thrown when creating resources', async () => { - context.core.elasticsearch.client.asCurrentUser.indices.exists.mockRejectedValue( + context.core.elasticsearch.client.asInternalUser.indices.exists.mockRejectedValue( new Error('Test error') ); const response = await server.inject( diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts index 17c2011fbc0f53..bc511d99eb63d9 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts @@ -11,20 +11,26 @@ import { ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION, CreateKnowledgeBaseRequestParams, CreateKnowledgeBaseResponse, + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, } from '@kbn/elastic-assistant-common'; import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; import { IKibanaResponse, KibanaRequest } from '@kbn/core/server'; import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantPluginRouter, GetElser } from '../../types'; -import { KNOWLEDGE_BASE } from '../../../common/constants'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_DOCS_LOADED_QUERY, ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './constants'; import { getKbResource } from './get_kb_resource'; import { loadESQL } from '../../lib/langchain/content_loaders/esql_loader'; +import { DEFAULT_PLUGIN_NAME, getPluginNameFromRequest } from '../helpers'; + +// Since we're awaiting on ELSER setup, this could take a bit (especially if ML needs to autoscale) +// Consider just returning if attempt was successful, and switch to client polling +const ROUTE_HANDLER_TIMEOUT = 10 * 60 * 1000; // 10 * 60 seconds = 10 minutes /** * Load Knowledge Base index, pipeline, and resources (collection of documents) * @param router + * @param getElser */ export const postKnowledgeBaseRoute = ( router: ElasticAssistantPluginRouter, @@ -33,11 +39,12 @@ export const postKnowledgeBaseRoute = ( router.versioned .post({ access: 'internal', - path: KNOWLEDGE_BASE, + path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, options: { - // Note: Relying on current user privileges to scope an esClient. - // Add `access:kbnElasticAssistant` to limit API access to only users with assistant privileges - tags: [], + tags: ['access:elasticAssistant'], + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, }, }) .addVersion( @@ -58,12 +65,44 @@ export const postKnowledgeBaseRoute = ( const assistantContext = await context.elasticAssistant; const logger = assistantContext.logger; const telemetry = assistantContext.telemetry; + const elserId = await getElser(); + const core = await context.core; + const esClient = core.elasticsearch.client.asInternalUser; + const soClient = core.savedObjects.getClient(); + + const pluginName = getPluginNameFromRequest({ + request, + defaultPluginName: DEFAULT_PLUGIN_NAME, + logger, + }); + const enableKnowledgeBaseByDefault = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; try { - const core = await context.core; - // Get a scoped esClient for creating the Knowledge Base index, pipeline, and documents - const esClient = core.elasticsearch.client.asCurrentUser; - const elserId = await getElser(request, core.savedObjects.getClient()); + // Code path for when `assistantKnowledgeBaseByDefault` FF is enabled + if (enableKnowledgeBaseByDefault) { + const knowledgeBaseDataClient = + await assistantContext.getAIAssistantKnowledgeBaseDataClient(true); + if (!knowledgeBaseDataClient) { + return response.custom({ body: { success: false }, statusCode: 500 }); + } + + // Continue to use esStore for loading esql docs until `semantic_text` is available and we can test the new chunking strategy + const esStore = new ElasticsearchStore( + esClient, + knowledgeBaseDataClient.indexTemplateAndPattern.alias, + logger, + telemetry, + elserId, + getKbResource(request), + knowledgeBaseDataClient + ); + + await knowledgeBaseDataClient.setupKnowledgeBase({ esStore, soClient }); + + return response.ok({ body: { success: true } }); + } + const kbResource = getKbResource(request); const esStore = new ElasticsearchStore( esClient, diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index 6c2be6b8c71201..ab9250047f7ef4 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -23,6 +23,7 @@ import { PassThrough } from 'stream'; import { getConversationResponseMock } from '../ai_assistant_data_clients/conversations/update_conversation.test'; import { actionsClientMock } from '@kbn/actions-plugin/server/actions_client/actions_client.mock'; import { getFindAnonymizationFieldsResultWithSingleHit } from '../__mocks__/response'; +import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const actionsClient = actionsClientMock.create(); jest.mock('../lib/build_response', () => ({ @@ -92,6 +93,7 @@ const mockContext = { getActionsClientWithRequest: jest.fn().mockResolvedValue(actionsClient), }, getRegisteredTools: jest.fn(() => []), + getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), logger: loggingSystemMock.createLogger(), telemetry: { ...coreMock.createSetup().analytics, reportEvent }, getCurrentUser: () => ({ diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index e76b7cd3377835..88eb632ce302ef 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -31,7 +31,7 @@ import { POST_ACTIONS_CONNECTOR_EXECUTE } from '../../common/constants'; import { getLangChainMessages } from '../lib/langchain/helpers'; import { buildResponse } from '../lib/build_response'; import { ElasticAssistantRequestHandlerContext, GetElser } from '../types'; -import { ESQL_RESOURCE } from './knowledge_base/constants'; +import { ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './knowledge_base/constants'; import { callAgentExecutor } from '../lib/langchain/execute_custom_llm_chain'; import { DEFAULT_PLUGIN_NAME, @@ -41,6 +41,7 @@ import { import { getLangSmithTracer } from './evaluate/utils'; import { EsAnonymizationFieldsSchema } from '../ai_assistant_data_clients/anonymization_fields/types'; import { transformESSearchToAnonymizationFields } from '../ai_assistant_data_clients/anonymization_fields/helpers'; +import { ElasticsearchStore } from '../lib/langchain/elasticsearch_store/elasticsearch_store'; export const postActionsConnectorExecuteRoute = ( router: IRouter, @@ -315,7 +316,7 @@ export const postActionsConnectorExecuteRoute = ( []) as unknown as Array> ); - const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const elserId = await getElser(); const anonymizationFieldsRes = await anonymizationFieldsDataClient?.findDocuments({ @@ -323,6 +324,27 @@ export const postActionsConnectorExecuteRoute = ( page: 1, }); + // Create an ElasticsearchStore for KB interactions + // Setup with kbDataClient if `enableKnowledgeBaseByDefault` FF is enabled + const enableKnowledgeBaseByDefault = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; + const kbDataClient = enableKnowledgeBaseByDefault + ? (await assistantContext.getAIAssistantKnowledgeBaseDataClient(false)) ?? undefined + : undefined; + const kbIndex = + enableKnowledgeBaseByDefault && kbDataClient != null + ? kbDataClient.indexTemplateAndPattern.alias + : KNOWLEDGE_BASE_INDEX_PATTERN; + const esStore = new ElasticsearchStore( + esClient, + kbIndex, + logger, + telemetry, + elserId, + ESQL_RESOURCE, + kbDataClient + ); + const result: StreamResponseWithHeaders | StaticReturnType = await callAgentExecutor({ abortSignal, alertsIndexPattern: request.body.alertsIndexPattern, @@ -333,14 +355,13 @@ export const postActionsConnectorExecuteRoute = ( isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase ?? false, assistantTools, connectorId, - elserId, esClient, + esStore, isStream: // TODO implement llmClass for bedrock streaming // tracked here: https://github.com/elastic/security-team/issues/7363 request.body.subAction !== 'invokeAI' && actionTypeId === '.gen-ai', llmType: getLlmType(actionTypeId), - kbResource: ESQL_RESOURCE, langChainMessages, logger, onNewReplacements, @@ -348,7 +369,6 @@ export const postActionsConnectorExecuteRoute = ( request, replacements: request.body.replacements, size: request.body.size, - telemetry, traceOptions: { projectName: langSmithProject, tracers: getLangSmithTracer({ diff --git a/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts b/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts index 325f4a84ab8c7a..fc0e30f4a925c4 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts @@ -5,15 +5,10 @@ * 2.0. */ -import type { KibanaRequest, Logger, SavedObjectsClientContract } from '@kbn/core/server'; -import { once } from 'lodash/fp'; +import type { Logger } from '@kbn/core/server'; import { postAttackDiscoveryRoute } from './attack_discovery/post_attack_discovery'; -import { - ElasticAssistantPluginRouter, - ElasticAssistantPluginSetupDependencies, - GetElser, -} from '../types'; +import { ElasticAssistantPluginRouter, GetElser } from '../types'; import { createConversationRoute } from './user_conversations/create_route'; import { deleteConversationRoute } from './user_conversations/delete_route'; import { readConversationRoute } from './user_conversations/read_route'; @@ -36,7 +31,7 @@ import { findAnonymizationFieldsRoute } from './anonymization_fields/find_route' export const registerRoutes = ( router: ElasticAssistantPluginRouter, logger: Logger, - plugins: ElasticAssistantPluginSetupDependencies + getElserId: GetElser ) => { // Capabilities getCapabilitiesRoute(router); @@ -56,12 +51,6 @@ export const registerRoutes = ( // Knowledge Base deleteKnowledgeBaseRoute(router); - const getElserId: GetElser = once( - async (request: KibanaRequest, savedObjectsClient: SavedObjectsClientContract) => { - return (await plugins.ml.trainedModelsProvider(request, savedObjectsClient).getELSER()) - .model_id; - } - ); getKnowledgeBaseStatusRoute(router, getElserId); postKnowledgeBaseRoute(router, getElserId); diff --git a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts index 82e21a8cd86909..0a0864882df164 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -81,6 +81,18 @@ export class RequestContextFactory implements IRequestContextFactory { telemetry: core.analytics, + // Note: Due to plugin lifecycle and feature flag registration timing, we need to pass in the feature flag here + // Remove `initializeKnowledgeBase` once 'assistantKnowledgeBaseByDefault' feature flag is removed + getAIAssistantKnowledgeBaseDataClient: memoize((initializeKnowledgeBase = false) => { + const currentUser = getCurrentUser(); + return this.assistantService.createAIAssistantKnowledgeBaseDataClient({ + spaceId: getSpaceId(), + logger: this.logger, + currentUser, + initializeKnowledgeBase, + }); + }), + getAIAssistantPromptsDataClient: memoize(() => { const currentUser = getCurrentUser(); return this.assistantService.createAIAssistantPromptsDataClient({ diff --git a/x-pack/plugins/elastic_assistant/server/services/app_context.test.ts b/x-pack/plugins/elastic_assistant/server/services/app_context.test.ts index 57ca4ea18651c8..e91a0ec024c9ef 100644 --- a/x-pack/plugins/elastic_assistant/server/services/app_context.test.ts +++ b/x-pack/plugins/elastic_assistant/server/services/app_context.test.ts @@ -102,6 +102,7 @@ describe('AppContextService', () => { it('should register and get features for a single plugin', () => { const pluginName = 'pluginName'; const features: AssistantFeatures = { + ...defaultAssistantFeatures, assistantModelEvaluation: true, }; @@ -116,10 +117,12 @@ describe('AppContextService', () => { it('should register and get features for multiple plugins', () => { const pluginOne = 'plugin1'; const featuresOne: AssistantFeatures = { + ...defaultAssistantFeatures, assistantModelEvaluation: true, }; const pluginTwo = 'plugin2'; const featuresTwo: AssistantFeatures = { + ...defaultAssistantFeatures, assistantModelEvaluation: false, }; @@ -134,9 +137,11 @@ describe('AppContextService', () => { it('should update features if registered again', () => { const pluginName = 'pluginName'; const featuresOne: AssistantFeatures = { + ...defaultAssistantFeatures, assistantModelEvaluation: true, }; const featuresTwo: AssistantFeatures = { + ...defaultAssistantFeatures, assistantModelEvaluation: false, }; diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 63b62e8943c209..7278e104ac76ad 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -17,7 +17,6 @@ import type { IRouter, KibanaRequest, Logger, - SavedObjectsClientContract, } from '@kbn/core/server'; import { type MlPluginSetup } from '@kbn/ml-plugin/server'; import { DynamicStructuredTool, Tool } from '@langchain/core/tools'; @@ -42,6 +41,7 @@ import { import { AIAssistantConversationsDataClient } from './ai_assistant_data_clients/conversations'; import type { GetRegisteredFeatures, GetRegisteredTools } from './services/app_context'; import { AIAssistantDataClient } from './ai_assistant_data_clients'; +import { AIAssistantKnowledgeBaseDataClient } from './ai_assistant_data_clients/knowledge_base'; export const PLUGIN_ID = 'elasticAssistant' as const; @@ -110,6 +110,9 @@ export interface ElasticAssistantApiRequestHandlerContext { getSpaceId: () => string; getCurrentUser: () => AuthenticatedUser | null; getAIAssistantConversationsDataClient: () => Promise; + getAIAssistantKnowledgeBaseDataClient: ( + initializeKnowledgeBase: boolean + ) => Promise; getAIAssistantPromptsDataClient: () => Promise; getAIAssistantAnonymizationFieldsDataClient: () => Promise; telemetry: AnalyticsServiceSetup; @@ -129,10 +132,7 @@ export type ElasticAssistantPluginCoreSetupDependencies = CoreSetup< ElasticAssistantPluginStart >; -export type GetElser = ( - request: KibanaRequest, - savedObjectsClient: SavedObjectsClientContract -) => Promise | never; +export type GetElser = () => Promise | never; export interface InitAssistantResult { assistantResourcesInstalled: boolean; @@ -144,30 +144,30 @@ export interface InitAssistantResult { export interface AssistantResourceNames { componentTemplate: { conversations: string; + knowledgeBase: string; prompts: string; anonymizationFields: string; - kb: string; }; indexTemplate: { conversations: string; + knowledgeBase: string; prompts: string; anonymizationFields: string; - kb: string; }; aliases: { conversations: string; + knowledgeBase: string; prompts: string; anonymizationFields: string; - kb: string; }; indexPatterns: { conversations: string; + knowledgeBase: string; prompts: string; anonymizationFields: string; - kb: string; }; pipelines: { - kb: string; + knowledgeBase: string; }; } diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index 20146c45df5faf..345949b866262c 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -29,7 +29,6 @@ "@kbn/logging", "@kbn/ml-plugin", "@kbn/apm-utils", - "@kbn/core-analytics-server", "@kbn/elastic-assistant-common", "@kbn/core-http-router-server-mocks", "@kbn/data-stream-adapter", @@ -45,6 +44,8 @@ "@kbn/ml-response-stream", "@kbn/data-plugin", "@kbn/i18n", + "@kbn/core-security-common", + "@kbn/core-saved-objects-api-server", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 565177fa8b5607..a11fb495795a96 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -138,6 +138,11 @@ export const allowedExperimentalValues = Object.freeze({ */ assistantModelEvaluation: false, + /** + * Enables the Assistant Knowledge Base by default, introduced in `8.15.0`. + */ + assistantKnowledgeBaseByDefault: false, + /** * Enables the new user details flyout displayed on the Alerts table. */ diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index a2440482f537e4..369648f037df2c 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -566,6 +566,7 @@ export class Plugin implements ISecuritySolutionPlugin { // Assistant Tool and Feature Registration plugins.elasticAssistant.registerTools(APP_UI_ID, getAssistantTools()); plugins.elasticAssistant.registerFeatures(APP_UI_ID, { + assistantKnowledgeBaseByDefault: config.experimentalFeatures.assistantKnowledgeBaseByDefault, assistantModelEvaluation: config.experimentalFeatures.assistantModelEvaluation, }); plugins.elasticAssistant.registerFeatures('management', { From c529e5be09e684ffea1ad736c1e8faf66a8714fe Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 20 May 2024 15:58:44 -0700 Subject: [PATCH 42/97] [UII] Make request diagnostics expiration test more tolerant (#183871) ## Summary Resolves https://github.com/elastic/kibana/issues/183865. The test here using `moment.diff` fails if the expiration and creation time are off even by even a fraction of a second. This PR makes the test more tolerant by seeing if the difference is minutes is 3 hours-ish. --- .../fleet_api_integration/apis/agents/request_diagnostics.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts index 679f409b256025..45cca59da5e8e9 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts @@ -41,8 +41,9 @@ export default function (providerContext: FtrProviderContext) { expect(actionStatus.nbAgentsActionCreated).to.eql(agentCount); expect( - moment(actionStatus.expiration).diff(moment(actionStatus.creationTime), 'hours') - ).to.eql(3); + moment(actionStatus.expiration).diff(moment(actionStatus.creationTime), 'minutes') > 170 && + moment(actionStatus.expiration).diff(moment(actionStatus.creationTime), 'minutes') < 190 + ).to.eql(true); } it('should respond 403 if user lacks fleet read permissions', async () => { From 742dff0f222af55d1a8156e6d32bd22e2302a141 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 21 May 2024 01:07:19 -0400 Subject: [PATCH 43/97] [api-docs] 2024-05-21 Daily api_docs build (#183884) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/713 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.devdocs.json | 279 +++- api_docs/expressions.mdx | 4 +- 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 | 43 + 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/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 4 + api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.devdocs.json | 293 +++- api_docs/kbn_data_forge.mdx | 7 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.devdocs.json | 111 -- api_docs/kbn_elastic_assistant.mdx | 4 +- .../kbn_elastic_assistant_common.devdocs.json | 1377 ++++++++++++++--- api_docs/kbn_elastic_assistant_common.mdx | 4 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- .../kbn_user_profile_components.devdocs.json | 4 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 14 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 14 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 700 files changed, 2454 insertions(+), 1080 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 0d8591b85a84c8..493c0cd4a1d399 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-05-20 +date: 2024-05-21 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 e9a421e888be23..2b08b8f1d96684 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index e02245146f91be..d34fbace90d10c 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 7ecce04ce1e653..b5be478a5bd8b8 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-05-20 +date: 2024-05-21 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 b28eb1bfdaf88c..bc94f0a8c9296d 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-05-20 +date: 2024-05-21 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 2c3da0893ff2a3..624abe5f51a000 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index f50b0eea773706..e4f1826bd6e79f 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index b0ff0227b6d018..cfd7c5a5350cea 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 401513ef27e183..50af728439c5e9 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 31fbbf7e94578c..b40d5bf144f5d5 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-05-20 +date: 2024-05-21 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 bba0e4c29bab6e..d196abe7007e0a 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-05-20 +date: 2024-05-21 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 24ed742c77f026..0c5c8d17d4c7ff 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-05-20 +date: 2024-05-21 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 1c3da2e8f72364..d5a1d12f353fd7 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-05-20 +date: 2024-05-21 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 1307d78b19c434..debf6ad62db827 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-05-20 +date: 2024-05-21 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 ae1f4c9893e4fd..ca37a9d2cd0cdd 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 3c32678ea6a9df..f69b4e3ef89e26 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-05-20 +date: 2024-05-21 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 8de28a174848f0..5c5f142213aa2b 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-05-20 +date: 2024-05-21 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 e6e64081f48169..5fe6e545b60df8 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-05-20 +date: 2024-05-21 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 d3be4f1ecfc58c..cbfefb9e0f06e1 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-05-20 +date: 2024-05-21 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 c8c436075e0062..8b42d370625fb6 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-05-20 +date: 2024-05-21 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 3d97d8d324d82c..3cb7c10ef9cf3a 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 4bb2d4f5b695e8..73f8d134dd24f4 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-05-20 +date: 2024-05-21 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 d20c0d817bad28..98cb6791538046 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-05-20 +date: 2024-05-21 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 ebc2ca136d543b..56721a63df6106 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-05-20 +date: 2024-05-21 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 ed8a799c2e890d..0508847662fe27 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-05-20 +date: 2024-05-21 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 1a5d1f793c6245..2eee2878302321 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-05-20 +date: 2024-05-21 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 72ec9098d970b7..25b786dc3e132b 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-05-20 +date: 2024-05-21 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 f9e1313b825b55..d13b29c37c66ed 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-05-20 +date: 2024-05-21 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 e14fbb84c8c3e0..2c0ded36b5ef5c 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-05-20 +date: 2024-05-21 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 47f679b6486877..36bea2d273a687 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-05-20 +date: 2024-05-21 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 dc854eb2bc307d..e31a93de692afe 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 be2d13723e34be..764cabf1a84641 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-05-20 +date: 2024-05-21 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 0ce9929024c753..19861a85c21172 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 5cc8ac5c6b11bd..4a70997bf3f425 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 7fdfb650df82d8..6ff52b7f2d9ebd 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 18390038fa5007..a7eff036be5c09 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 919da7d93a1748..246f46bbd55931 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index fe61ae6d29a50e..216c269ca32dd9 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-05-20 +date: 2024-05-21 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 14de89d8f6e4b4..6ccef85bc389c5 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-05-20 +date: 2024-05-21 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 653c09fe0385f6..e99b8dd51c4c93 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 97c75e0d7949eb..a43cb711ef34c8 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 4c6d8f24223abb..b646fa67ec3bdb 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index c1d9e7f1f3dabf..38ba832b6a27dd 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 757f36c217e317..da37c85a887e11 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-05-20 +date: 2024-05-21 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 3bd9e45fbb55fc..2bf59add4087af 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-05-20 +date: 2024-05-21 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 0f027d6476aab2..071e90c08e9016 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index df612f3ba58c09..9a71b04a061354 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index bfbce14d2f28a6..639bd870d2f3b2 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-05-20 +date: 2024-05-21 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 a143a6710e4fa7..8a079ca44054b0 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 6305e112cb7633..8bec7ed5069bfe 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 67bf2d55c88caf..2100558fb1cd46 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-05-20 +date: 2024-05-21 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 ea5ad4f14611ce..c87a73aae0c8cd 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-05-20 +date: 2024-05-21 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 13ddadc0355f10..9f51faee139e40 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-05-20 +date: 2024-05-21 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 7b7e8b16fe3d9c..b3c26e0418ce32 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-05-20 +date: 2024-05-21 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 36a025e989bd6a..17f3e8018dd8a8 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-05-20 +date: 2024-05-21 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 2ed037401a5eeb..cbde1df5a1bd7d 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-05-20 +date: 2024-05-21 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 0a2f7f52ae824b..e2fc0ad78bf7b2 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-05-20 +date: 2024-05-21 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 de0d33b3fe139d..ee1d04f2a85f94 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-05-20 +date: 2024-05-21 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 81552f2a713901..020a7489e26c74 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-05-20 +date: 2024-05-21 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 0d361a1ef6ee5f..7e0d8f41e36411 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-05-20 +date: 2024-05-21 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 3221b1bc913910..54ce1f13ae8fa2 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-05-20 +date: 2024-05-21 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 c41d008ceab6d0..7744cf7e8d7ce2 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-05-20 +date: 2024-05-21 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 857bb8256b2ec2..5c04fb6b3cd7bf 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-05-20 +date: 2024-05-21 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 36feeaee47c02f..88c6814e49aa66 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-05-20 +date: 2024-05-21 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 9a90063d9957ab..80308f6eb6b3a1 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index 550863a9a75e6b..9f91694efe0cf5 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -270,6 +270,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-public.Execution.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/execution/execution.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -1271,6 +1288,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-public.Executor.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/executor/executor.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -2197,6 +2231,19 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-public.ExpressionFunction.allowCache", + "type": "boolean", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "path": "src/plugins/expressions/common/expression_functions/expression_function.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-public.ExpressionFunction.fn", @@ -7146,6 +7193,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-public.ExecutionContext.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nAllow caching in the current execution." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/execution/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-public.ExecutionContext.abortSignal", @@ -8383,6 +8446,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-public.ExpressionFunctionDefinition.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-public.ExpressionFunctionDefinition.inputTypes", @@ -10726,20 +10805,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "expressions", - "id": "def-public.IExpressionLoaderParams.disableCaching", - "type": "CompoundType", - "tags": [], - "label": "disableCaching", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/expressions/public/types/index.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "expressions", "id": "def-public.IExpressionLoaderParams.customFunctions", @@ -11011,6 +11076,20 @@ "path": "src/plugins/expressions/public/types/index.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-public.IExpressionLoaderParams.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/public/types/index.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -13813,6 +13892,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-server.Execution.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/execution/execution.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -14595,6 +14691,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-server.Executor.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/executor/executor.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -15521,6 +15634,19 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-server.ExpressionFunction.allowCache", + "type": "boolean", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "path": "src/plugins/expressions/common/expression_functions/expression_function.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-server.ExpressionFunction.fn", @@ -18575,6 +18701,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-server.ExecutionContext.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nAllow caching in the current execution." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/execution/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-server.ExecutionContext.abortSignal", @@ -19781,6 +19923,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-server.ExpressionFunctionDefinition.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-server.ExpressionFunctionDefinition.inputTypes", @@ -22974,6 +23132,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.Execution.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/execution/execution.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -23975,6 +24150,23 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.Executor.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "functionCache", + "description": [], + "signature": [ + "Map" + ], + "path": "src/plugins/expressions/common/executor/executor.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -24901,6 +25093,19 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionFunction.allowCache", + "type": "boolean", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "path": "src/plugins/expressions/common/expression_functions/expression_function.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-common.ExpressionFunction.fn", @@ -30648,6 +30853,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-common.ExecutionContext.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nAllow caching in the current execution." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/execution/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-common.ExecutionContext.abortSignal", @@ -32523,6 +32744,20 @@ "path": "src/plugins/expressions/common/service/expressions_services.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionExecutionParams.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/service/expressions_services.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -32675,6 +32910,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionFunctionDefinition.allowCache", + "type": "CompoundType", + "tags": [], + "label": "allowCache", + "description": [ + "\nOpt-in to caching this function. By default function outputs are cached and given the same inputs cached result is returned." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "expressions", "id": "def-common.ExpressionFunctionDefinition.inputTypes", diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 8e952fd6518609..dba7bd5ae3fa9e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2217 | 17 | 1756 | 5 | +| 2233 | 17 | 1763 | 6 | ## Client diff --git a/api_docs/features.mdx b/api_docs/features.mdx index e06c1d1c230648..1775b2effece93 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-05-20 +date: 2024-05-21 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 a693e34dcd7487..865347fd794cbc 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-05-20 +date: 2024-05-21 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 870212a3293ee1..6c692683ca534b 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-05-20 +date: 2024-05-21 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 7bb838c05c90fa..a8f0822dcce5c5 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-05-20 +date: 2024-05-21 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 ac9ae8788cf906..da07c2c9e15c4f 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 9767c0c9487f82..4cab4f1eb96b0f 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -27389,6 +27389,17 @@ "path": "x-pack/plugins/fleet/common/constants/routes.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.AGENT_API_ROUTES.DELETE_UPLOAD_FILE_PATTERN", + "type": "string", + "tags": [], + "label": "DELETE_UPLOAD_FILE_PATTERN", + "description": [], + "path": "x-pack/plugins/fleet/common/constants/routes.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -28361,6 +28372,38 @@ ], "returnComment": [] }, + { + "parentPluginId": "fleet", + "id": "def-common.agentRouteService.getAgentFileDeletePath", + "type": "Function", + "tags": [], + "label": "getAgentFileDeletePath", + "description": [], + "signature": [ + "(fileId: string) => string" + ], + "path": "x-pack/plugins/fleet/common/services/routes.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-common.agentRouteService.getAgentFileDeletePath.$1", + "type": "string", + "tags": [], + "label": "fileId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/fleet/common/services/routes.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "fleet", "id": "def-common.agentRouteService.getAgentsByActionsPath", diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 75ac3909b94082..6812c5063c5141 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-05-20 +date: 2024-05-21 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 | |-------------------|-----------|------------------------|-----------------| -| 1305 | 5 | 1184 | 66 | +| 1308 | 5 | 1187 | 66 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index ee0269cb007a6f..b5d06b112b881a 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-05-20 +date: 2024-05-21 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 3541f8296b9b60..82111931abdcf4 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-05-20 +date: 2024-05-21 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 8f14b511df1933..672072da5318f6 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-05-20 +date: 2024-05-21 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 5f558f384c873a..3cc78b07194b79 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-05-20 +date: 2024-05-21 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 3f71772224b123..c1a970c3960f7b 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 ac72aa6d904f74..11616878befdef 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 d85f5f4552cb14..0b79d170f8b573 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index a72b9a69056585..0cdf1a4faf51f5 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index ce43a012265d93..8ee4e69fdda842 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-05-20 +date: 2024-05-21 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 5d011943364356..ab7b213498f1b8 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-05-20 +date: 2024-05-21 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 75116cba2206b3..afc5eced5219bc 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 2218cc06aec6f4..e26e3184d8d9dc 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 37b1ce851614a2..de54740076465a 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 6d2d3f466d0b70..86505dababd651 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index a244910fe2af84..19d50b3ad6f1c8 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index bd3e35c9109500..231b0981f8fd5c 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index f8a768273a666b..925f18a8ed40f0 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index f69d8259e75543..dac12c4b6610c0 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index a40a003ea3ad4c..6074aab369cfdb 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 0ceaddc5d97c61..ff23dfc6f42929 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-05-20 +date: 2024-05-21 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 e6d44f5fc12afa..56ed799d5ab03a 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-05-20 +date: 2024-05-21 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 11475be46c8e8a..2f82e9c74fc99c 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index a63f4e6cc0ff22..ef1746b96a6de0 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 7d57f62f663835..ce5a83b678ec4f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 2454fb1be5b45a..3240d66b53c1a1 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-05-20 +date: 2024-05-21 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 3a6988d2f10834..39367c29bc3c54 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-05-20 +date: 2024-05-21 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 2194b53b01c673..9fc7be45857703 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d24056e55af3aa..5b1113a7692a40 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 4ebcfcea511282..8554e502a68660 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 5a2b271647f7a5..9cd34ec9160fe7 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-05-20 +date: 2024-05-21 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 33a7e8454d3624..d1efdca260000b 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-05-20 +date: 2024-05-21 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 b8771eaff3bb92..981a2d1c011241 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 cd2250bbfe5ac2..5ff994e9c3807a 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 18493c8dc87186..db2e7000cadff8 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index d2b31ce98859ca..64d381578b5626 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 0eee9d95b4a8fd..3b38b3b7e866c4 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 29518f89e58484..5dc7f1fb876f1d 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-05-20 +date: 2024-05-21 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 6188e8d4e43104..ca3d27b71f4737 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-05-20 +date: 2024-05-21 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 d1060783d23e5d..11a5b79866b102 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-05-20 +date: 2024-05-21 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 534410c9302da7..cdc6a0f565e04a 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-05-20 +date: 2024-05-21 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 b0e473d635928e..db9e773a289fc7 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-05-20 +date: 2024-05-21 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 9f8ec810a0beb9..86487c67b169ce 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-05-20 +date: 2024-05-21 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 ce73f8f8cca07e..8616b3d3f10a1a 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-05-20 +date: 2024-05-21 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 69067a211490d4..4290c8f0548af5 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-05-20 +date: 2024-05-21 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 6ab116495d9bb9..d70152e49ad99a 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index e5a09418a4cf74..7f5a50ea60493e 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 86fa8a1239df44..1225fd91a0ec4a 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index cd38f5bf1a8d20..3b3d0b9fd2602f 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-05-20 +date: 2024-05-21 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 3f71b281bebfe2..e95e262ee12457 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-05-20 +date: 2024-05-21 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 b860f3d4dbb49f..76058ad0f7e244 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 99427ae6913026..23a5749bbf8b9e 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-05-20 +date: 2024-05-21 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 282e87f93cf19b..17903ee2887b91 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-05-20 +date: 2024-05-21 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 f0730ac49dc9f8..f86cf637c3f779 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-05-20 +date: 2024-05-21 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 e9dd9c590fe783..8a50f3bccb8c64 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 4ea257e9f46937..1bff99f484f515 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index eba7e73df28e3c..8c6281c1d7c953 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-05-20 +date: 2024-05-21 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 f5ad856df42f23..5db024b9a19f9c 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 60a7faf24d75ee..84efe23ba71d45 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 52d781de782fc6..48addf197c45ae 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 f1cf5126f992ef..9987ec96a08f3a 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 2f4a695a3ed538..9e4dc12d40a3da 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-05-20 +date: 2024-05-21 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 eff968fe20d2df..a86b8b4214e729 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 185158860feeec..7a96c8128d085b 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 3d0ea8e3ec7d67..1c805c411eaafa 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 ecc47ebaa0cfcd..ba5717307fb0a6 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 c776bc132b6358..a3bfbbb43b0f1f 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 9e4c892189ffae..ac8527534d2963 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-05-20 +date: 2024-05-21 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 c7cdaa131350d5..64d4d7c5617cd5 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 8b8ceb5dcdc304..98eac7c903d800 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 86c9e52e0e3f07..effbb223c8b5a7 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 81f88c68b532c3..a038cbfdbfc4c2 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 119defe80e8d8f..0eb6d780baf6a5 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-05-20 +date: 2024-05-21 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 c2898e2946b880..411d63eff470dd 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 5f13b1c5433d8b..9be18c065bcfaf 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 b52877a793a780..3f9f6c5d89be90 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 893d300a007c70..c62456937b33d5 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-05-20 +date: 2024-05-21 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 a79edf2889cc0d..07f379942fa210 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-05-20 +date: 2024-05-21 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 af6110cdeb0d0d..0a78e0f36196ba 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 561f388dc48560..6ddd27acb66758 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 6b1c3c2669c580..06cd5f2c241073 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 809ec82628dc20..45c42785dde0b1 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 1888c71dc222e2..ce2996b119a514 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 d872ef0b244f06..60aef229bbb444 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 8dc1b7e7b1d643..3509cd9d534194 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 c71457189c7b03..e04f152ef01124 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-05-20 +date: 2024-05-21 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 cd134fe1ca8993..72dcad581873da 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-05-20 +date: 2024-05-21 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 30e01ce4f57fee..ad15c5e0be9015 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 3dd58bffce2a18..727d38f12c51cc 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 bb4457182fb78f..a5d11dd99b1181 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 b92742537b0cf7..77fbf58a23b2f0 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 5a8c0b1d390ec0..3fbf18af55c0cc 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 11cbe6769aca85..79de786d4ee07d 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-05-20 +date: 2024-05-21 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 4ebdebbcefc411..3f3637aafe9145 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-05-20 +date: 2024-05-21 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 d1d60c1286e565..735124fe5edc9f 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 65ddf2ae2bfa3f..7be7bf6f41b8c9 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 21b43244656957..a818c75c1d48e2 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 936e409ff66d39..ada1a389551b60 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 8b86585b416853..b6e48d96fcb195 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-05-20 +date: 2024-05-21 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 58cb78c71fe101..1766a73c5f6606 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 8ac84befbf69c9..1f21d0b643ab8c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 30511a404be73f..65580810ba2454 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index d0ff8f1de473fe..eee212da47264f 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-05-20 +date: 2024-05-21 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 d7f6cc37203875..a171ecc7cc4bb3 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 fac72a013f43b9..f7a26bb71fbdc0 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 4127b498872203..5345e4ba140457 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 cdeced5ebdd5ff..4bac1efcf366b4 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 013294e2d76228..69257f9ba447a6 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 8621e8d3c2e2e7..6bff2e205795b7 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 69587202b0f55c..05f5c88695f869 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 2c43e99c5be70c..fe68d9db331bb8 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-05-20 +date: 2024-05-21 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 650c2c5883b56c..d3ed9407dffa30 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-05-20 +date: 2024-05-21 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 58ee74f8370639..156aefa40e5433 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 a1a31922adb06e..ebf5bc3981120f 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 81ffc36c9db11e..a87a8b446be9b7 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 d79fa0cc8cb875..64c1c6285c5b0c 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 2ffc1dac97282a..8a9d0782da7d3e 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 51ab111ca359be..e8b52ca7be7d94 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 426ce00b4bd152..878a78ddcbb470 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 9d396f7034a824..c03d22d3dcd4dd 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-05-20 +date: 2024-05-21 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 f1d3850165adb7..9853283bd7a6b2 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 41b759d54336b0..cdb221757ff384 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-05-20 +date: 2024-05-21 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 510eb73db7c094..196a576faa9c47 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-05-20 +date: 2024-05-21 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 c5f3f2ba852686..09429bb7cc45c7 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 f6791e889e18f0..2fa8c727c2cf4d 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 32b1a6dcafc430..a476ab2c88c5ba 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 f5febc6f537641..f3cb3cb789c95b 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 33341437b0c703..bc7e599284bc63 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -16017,6 +16017,10 @@ "plugin": "synthetics", "path": "x-pack/plugins/observability_solution/synthetics/server/server.ts" }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts" + }, { "plugin": "controls", "path": "src/plugins/controls/server/options_list/options_list_suggestions_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index cfd001143db62b..10620dd88d449f 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-05-20 +date: 2024-05-21 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 f12330784e8680..e942d48af5b7d2 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 ae39c8aa3f7a7e..4c4715d702c3a4 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 23a25a57d3eb26..c932da1756522e 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 8ad00b1a48823f..f238a9bb97c59d 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 32cd401da773a3..aaee85c8871871 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-05-20 +date: 2024-05-21 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 0854f4c38ea984..216d0a76e0a13d 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 7f47ab316c544a..88eac30a0bd4b1 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 34a1c903816290..fc1270bdb981d0 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 9c91f7b5c652e0..db683a698abcea 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 84709ef3d39aed..df19f19a83e7e8 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 1b414a10e89b7c..d884c970648981 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 de22679913fb2c..16961e19557534 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 d25d1d6e7ca21e..ca0f5b0a050341 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-05-20 +date: 2024-05-21 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 ee4919ebf5e8ab..45ae482982aee9 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 1714bfd1845149..64858847dda0f2 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 1880edca44f265..cfa1fbe582421a 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 c552d5b5c66d84..dc6528e53de59c 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-05-20 +date: 2024-05-21 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 e23a75f178d168..fa536dcc162595 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 fa24293b7e312a..fe5deb16575262 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 f3b2b9e9767aa4..403af98f43e925 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 0d9a4d1466990d..dca85594024178 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 6d5a874cdcab84..98156fe581aed2 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-05-20 +date: 2024-05-21 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 b3f6385ab4c766..65d81d37195305 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 74375c8683d14d..132e06155928f4 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 f40af57c33616e..34201d5a834cb6 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 0d23253462dfb8..e872a6cd3b1db7 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-05-20 +date: 2024-05-21 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 3687e2abd36c73..148dc728e8ce9a 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 394035fd76cfd7..254ba75a86b3f6 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 79b00ba8647928..8fea11522f70a5 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 64b82ef3698b99..01f71ada1bac7c 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 d754835110cb84..b5e5d770e8b5ae 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 477ae5b0578354..92789ea95228c5 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 3327fa9b318aeb..54e92a85655710 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 c657290d23f3b3..46dc987555e2e3 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 f87edc5118822c..cc74e9f929c633 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 6a85a491636be3..b25ef90189874f 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index a147aae398d78a..eee0260280ea66 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 41d446c49fd61e..ce757748d30b01 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index b088e990af2aab..92368d680c9281 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-05-20 +date: 2024-05-21 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 e93e9f10e06557..93ecf1f1574fef 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 6f5cdb2cc81af6..8c54aa97e4fe16 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-05-20 +date: 2024-05-21 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 c7620c8dab10a8..ef034254b46dab 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 983f50bf928638..54cf6156507a45 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 8edd076bae49f4..a6b3f62735d31c 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 a6c75edb284e30..56968d88c3735d 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 646f86ddffb1d5..3a33b1c6889993 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index d0546587273534..ad0bc1e878c5ff 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 bf16f75d077d56..931bc0e436d2d8 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-05-20 +date: 2024-05-21 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 69104f882c95b6..ee3aa2fb3eb4a8 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 1215cbdf6be487..f21e3b41a88205 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 c684ae28d93d77..9ef5ce8c2f8621 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 873f0c5a8ca7c8..849a57777e1a80 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 558e408949bc13..03c0992651f890 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 385b9057258c14..891eeef901294e 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 05671677309118..964831594087bf 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-05-20 +date: 2024-05-21 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 787138c6f15cf7..7d5408d4013ae7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 af20d6a5b716a3..bfd42adfe619a2 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 547e8c067421ee..0267126c7155e5 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 afc85c60d3b77a..cf8ad7cfa7a4ad 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 7a316b93c571db..277f6ca3178bd8 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-05-20 +date: 2024-05-21 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 3d4f73061547b2..45913c87649155 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 9075e800153020..73c19e3ef1e73a 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 4cd03e888abab0..2cca629fafa55a 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index a130b207b281dc..8503558028983d 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 886714cdf8b5c6..d9254f2f2a4b0b 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 9a4e4ab30250c7..466d72ac6118b8 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 784b57ee9703f7..d5b5b93b33a72d 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index d0e080e22ff5d0..046440497ac26e 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 699fa40e70673e..5dc94b17e20b7a 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 81cb5989b1a831..dbda028dadf005 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index cbe81ddc53c79f..28c7e6a3e8746a 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-05-20 +date: 2024-05-21 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 a6ab0cdded4aeb..3f4d7e340e7fe7 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 0b6f7c0cb560d6..2abe5da009ab61 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-05-20 +date: 2024-05-21 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 6727001ea7d804..e1cbf2f3e2d292 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 557c4a6e00dd40..eb86051255f333 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 660b3da203adc1..5dff130bfa26fa 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-05-20 +date: 2024-05-21 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 3e666591c85474..fdd90dfd2f95fd 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 8c77a30d6bbcaa..ef574cec1397f8 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 4ba5a9bde15ba4..d6655876071c3b 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 60f194cd061db2..3ae6d799d7e310 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-05-20 +date: 2024-05-21 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 36bc1e3ebba5fc..14766657721b5b 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 06557503403783..c3c06de504c429 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 3a597038edc1cd..7573692c723b76 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 4a3ef71a5ee38c..308082b2132382 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 03c8cea813f478..ed0ecfd9ce4f77 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 7681ee0ad948ee..ceac968d43bf8d 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 c92582e578de8b..79ea823b801a81 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-05-20 +date: 2024-05-21 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 878d3a8d57db0f..caf44af4454dd5 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-05-20 +date: 2024-05-21 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 4cf558fca15305..94174251d70a23 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 e5f208c7e76b1d..4ae6c2db4c990b 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 a70b2f2ef2e5d8..59845ca8678fa6 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-05-20 +date: 2024-05-21 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 6c242087b79ee3..c814d8b92c1280 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 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 da199ae3915380..29a7c0b87f9747 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index f6a183e6ed4104..5ab1528d462a4e 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 081ba81ed87c24..ccd6c1aee6de7a 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index d501ff9d9abfaf..7f1512f9c3887c 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 51a67737034310..b72600245c0e40 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 62077a80f00a4e..f8f8ec2faa629b 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index c2f3a4d5bba48b..25593dc5c6f8e7 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 24df1b2fc824e3..178bcdc7c1fa83 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 93aec5bc15e445..8e2d34af1f4d60 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index beeb99f06dba55..cf348050883522 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 e48726adf6cb91..457998988796f8 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-05-20 +date: 2024-05-21 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 a63c76df61ca31..7baceae269dfdc 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 8f60f2d77a286e..f46c04b8e1c465 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index cd8b527a77f955..b7790aac1df5d1 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 18e59134e133e5..e27ba76907a2d3 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.devdocs.json b/api_docs/kbn_data_forge.devdocs.json index abc002a41da4b9..232f42faa35b79 100644 --- a/api_docs/kbn_data_forge.devdocs.json +++ b/api_docs/kbn_data_forge.devdocs.json @@ -116,12 +116,31 @@ "label": "cli", "description": [], "signature": [ - "() => Promise" + "(cliOptions: ", + "CliOptions", + " | undefined) => Promise" ], "path": "x-pack/packages/kbn-data-forge/src/cli.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.cli.$1", + "type": "Object", + "tags": [], + "label": "cliOptions", + "description": [], + "signature": [ + "CliOptions", + " | undefined" + ], + "path": "x-pack/packages/kbn-data-forge/src/cli.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], "returnComment": [], "initialIsOpen": false }, @@ -469,6 +488,274 @@ "initialIsOpen": false } ], - "objects": [] + "objects": [ + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS", + "type": "Object", + "tags": [], + "label": "DEFAULTS", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.EVENTS_PER_CYCLE", + "type": "number", + "tags": [], + "label": "EVENTS_PER_CYCLE", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.PAYLOAD_SIZE", + "type": "number", + "tags": [], + "label": "PAYLOAD_SIZE", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.CONCURRENCY", + "type": "number", + "tags": [], + "label": "CONCURRENCY", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.SERVERLESS", + "type": "boolean", + "tags": [], + "label": "SERVERLESS", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.INDEX_INTERVAL", + "type": "number", + "tags": [], + "label": "INDEX_INTERVAL", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.DATASET", + "type": "string", + "tags": [], + "label": "DATASET", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.SCENARIO", + "type": "string", + "tags": [], + "label": "SCENARIO", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.ELASTICSEARCH_HOST", + "type": "string", + "tags": [], + "label": "ELASTICSEARCH_HOST", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.ELASTICSEARCH_USERNAME", + "type": "string", + "tags": [], + "label": "ELASTICSEARCH_USERNAME", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.ELASTICSEARCH_PASSWORD", + "type": "string", + "tags": [], + "label": "ELASTICSEARCH_PASSWORD", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.ELASTICSEARCH_API_KEY", + "type": "string", + "tags": [], + "label": "ELASTICSEARCH_API_KEY", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.SKIP_KIBANA_USER", + "type": "boolean", + "tags": [], + "label": "SKIP_KIBANA_USER", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.INSTALL_KIBANA_ASSETS", + "type": "boolean", + "tags": [], + "label": "INSTALL_KIBANA_ASSETS", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.DELAY_IN_MINUTES", + "type": "number", + "tags": [], + "label": "DELAY_IN_MINUTES", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.DELAY_EVERY_MINUTES", + "type": "number", + "tags": [], + "label": "DELAY_EVERY_MINUTES", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.LOOKBACK", + "type": "string", + "tags": [], + "label": "LOOKBACK", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.KIBANA_URL", + "type": "string", + "tags": [], + "label": "KIBANA_URL", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.KIBANA_USERNAME", + "type": "string", + "tags": [], + "label": "KIBANA_USERNAME", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.KIBANA_PASSWORD", + "type": "string", + "tags": [], + "label": "KIBANA_PASSWORD", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.EVENT_TEMPLATE", + "type": "string", + "tags": [], + "label": "EVENT_TEMPLATE", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.REDUCE_WEEKEND_TRAFFIC_BY", + "type": "number", + "tags": [], + "label": "REDUCE_WEEKEND_TRAFFIC_BY", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.EPHEMERAL_PROJECT_IDS", + "type": "number", + "tags": [], + "label": "EPHEMERAL_PROJECT_IDS", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-forge", + "id": "def-common.DEFAULTS.ALIGN_EVENTS_TO_INTERVAL", + "type": "boolean", + "tags": [], + "label": "ALIGN_EVENTS_TO_INTERVAL", + "description": [], + "path": "x-pack/packages/kbn-data-forge/src/constants.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 77b427641fd067..eb48471c5d7cf5 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 26 | 0 | 26 | 0 | +| 51 | 0 | 51 | 1 | ## Common +### Objects + + ### Functions diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index f7c8cd4f79e50c..c61d2d3a90e9a0 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index b3122f7ae51bd2..32069f179aaa06 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index aa2394b3a95fd6..4d99e14c5aac76 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 1d246c0a39d215..5af987d623bc89 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-05-20 +date: 2024-05-21 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 c07271541acd8b..4b92e6de06c531 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-05-20 +date: 2024-05-21 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 6adb69716e382c..ea25b14490c8e5 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 4fc9389ec9b651..95807f6acd159b 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 7b777f89de6b15..203f723f09943b 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-05-20 +date: 2024-05-21 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 ed60480d3d0fe7..221ec5c72ade0f 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-05-20 +date: 2024-05-21 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 8d3ff8af26804f..cf6cf91b3cbb4c 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-05-20 +date: 2024-05-21 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 aa1a17f089365b..6b3d11269f695c 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 187a9890bda0d9..94676c7eedda81 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index a4b5c02061939e..073365645cfe30 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 03124f5a248c1f..6244ee25d29a07 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-05-20 +date: 2024-05-21 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 36894a36fd4683..96ed3c0ac7c900 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-05-20 +date: 2024-05-21 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 7dd0d287bacf44..28a3f370b79415 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-05-20 +date: 2024-05-21 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 ce652d54e07ab5..e944710396350c 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-05-20 +date: 2024-05-21 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 c46e74bd04532c..62359a21e4d22b 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-05-20 +date: 2024-05-21 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 6918c4038640c2..304306b3521fbc 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-05-20 +date: 2024-05-21 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 9868b513092514..acfde0719a07ad 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-05-20 +date: 2024-05-21 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 772a9c2e99188f..7b3dce357a7b39 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 2bb02673cbaec9..67522fb6d02a10 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index cab07f28209d17..9659345e176aa7 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-05-20 +date: 2024-05-21 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 0358613769c728..bc1a552a78838f 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 64ffd0d644200e..ecdd69e47ad887 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-05-20 +date: 2024-05-21 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 b9973c05fa579c..9e348e319b490e 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index a3030a1edd466f..c166bbb7f8e022 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 962f4257ed9c15..9279d4b9915b83 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index 15d2789e991753..edb7425fa95088 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -2192,117 +2192,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.DeleteKnowledgeBaseResponse", - "type": "Interface", - "tags": [], - "label": "DeleteKnowledgeBaseResponse", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.DeleteKnowledgeBaseResponse.success", - "type": "boolean", - "tags": [], - "label": "success", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.GetKnowledgeBaseStatusResponse", - "type": "Interface", - "tags": [], - "label": "GetKnowledgeBaseStatusResponse", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.GetKnowledgeBaseStatusResponse.elser_exists", - "type": "boolean", - "tags": [], - "label": "elser_exists", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.GetKnowledgeBaseStatusResponse.esql_exists", - "type": "CompoundType", - "tags": [], - "label": "esql_exists", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.GetKnowledgeBaseStatusResponse.index_exists", - "type": "boolean", - "tags": [], - "label": "index_exists", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.GetKnowledgeBaseStatusResponse.pipeline_exists", - "type": "boolean", - "tags": [], - "label": "pipeline_exists", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.PostKnowledgeBaseResponse", - "type": "Interface", - "tags": [], - "label": "PostKnowledgeBaseResponse", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/elastic-assistant", - "id": "def-public.PostKnowledgeBaseResponse.success", - "type": "boolean", - "tags": [], - "label": "success", - "description": [], - "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.Prompt", diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 0bc60bbc90ce4f..d0173892ced634 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 174 | 0 | 147 | 9 | +| 165 | 0 | 138 | 9 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index d1ac54ba561ffe..387ca39c3bb1b9 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -776,7 +776,7 @@ "\nInterface for features available to the elastic assistant" ], "signature": [ - "{ readonly assistantModelEvaluation: boolean; }" + "{ readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantModelEvaluation: boolean; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", "deprecated": false, @@ -1134,6 +1134,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseEntryRequestBody", + "type": "Type", + "tags": [], + "label": "CreateKnowledgeBaseEntryRequestBody", + "description": [], + "signature": [ + "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseEntryRequestBodyInput", + "type": "Type", + "tags": [], + "label": "CreateKnowledgeBaseEntryRequestBodyInput", + "description": [], + "signature": [ + "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseEntryResponse", + "type": "Type", + "tags": [], + "label": "CreateKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.CreateKnowledgeBaseRequestParams", @@ -1254,6 +1299,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseEntryRequestParams", + "type": "Type", + "tags": [], + "label": "DeleteKnowledgeBaseEntryRequestParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseEntryRequestParamsInput", + "type": "Type", + "tags": [], + "label": "DeleteKnowledgeBaseEntryRequestParamsInput", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseEntryResponse", + "type": "Type", + "tags": [], + "label": "DeleteKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.DeleteKnowledgeBaseRequestParams", @@ -1410,6 +1500,57 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ELASTIC_AI_ASSISTANT_INTERNAL_URL", + "type": "string", + "tags": [], + "label": "ELASTIC_AI_ASSISTANT_INTERNAL_URL", + "description": [], + "signature": [ + "\"/internal/elastic_assistant\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL", + "type": "string", + "tags": [], + "label": "ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_BULK_ACTION", + "type": "string", + "tags": [], + "label": "ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_BULK_ACTION", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL", + "type": "string", + "tags": [], + "label": "ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ELASTIC_AI_ASSISTANT_PROMPTS_URL", @@ -1679,7 +1820,7 @@ "label": "GetCapabilitiesResponse", "description": [], "signature": [ - "{ assistantModelEvaluation: boolean; }" + "{ assistantKnowledgeBaseByDefault: boolean; assistantModelEvaluation: boolean; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts", "deprecated": false, @@ -1718,317 +1859,559 @@ }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.KnowledgeBaseResponse", + "id": "def-common.KnowledgeBaseEntryBulkActionBase", "type": "Type", "tags": [], - "label": "KnowledgeBaseResponse", - "description": [ - "\nAI assistant KnowledgeBase." - ], + "label": "KnowledgeBaseEntryBulkActionBase", + "description": [], "signature": [ - "{ success?: boolean | undefined; }" + "{ query?: string | undefined; ids?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.Message", + "id": "def-common.KnowledgeBaseEntryBulkActionSkipReason", "type": "Type", "tags": [], - "label": "Message", - "description": [ - "\nAI assistant conversation message." - ], + "label": "KnowledgeBaseEntryBulkActionSkipReason", + "description": [], "signature": [ - "{ timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }" + "\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.MessageRole", + "id": "def-common.KnowledgeBaseEntryBulkActionSkipResult", "type": "Type", "tags": [], - "label": "MessageRole", - "description": [ - "\nMessage role." - ], + "label": "KnowledgeBaseEntryBulkActionSkipResult", + "description": [], "signature": [ - "\"user\" | \"system\" | \"assistant\"" + "{ id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.MessageRoleEnum", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionResponse", "type": "Type", "tags": [], - "label": "MessageRoleEnum", + "label": "KnowledgeBaseEntryBulkCrudActionResponse", "description": [], "signature": [ - "{ user: \"user\"; system: \"system\"; assistant: \"assistant\"; }" + "{ attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.NonEmptyString", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionResults", "type": "Type", "tags": [], - "label": "NonEmptyString", - "description": [ - "\nA string that is not empty and does not contain only whitespace" - ], + "label": "KnowledgeBaseEntryBulkCrudActionResults", + "description": [], "signature": [ - "string" + "{ created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.NormalizedConversationError", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionSummary", "type": "Type", "tags": [], - "label": "NormalizedConversationError", + "label": "KnowledgeBaseEntryBulkCrudActionSummary", "description": [], "signature": [ - "{ message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }" + "{ total: number; succeeded: number; failed: number; skipped: number; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.OutputIndex", + "id": "def-common.KnowledgeBaseEntryCreateProps", "type": "Type", "tags": [], - "label": "OutputIndex", + "label": "KnowledgeBaseEntryCreateProps", "description": [], "signature": [ - "string" + "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PerformBulkActionRequestBody", + "id": "def-common.KnowledgeBaseEntryDetailsInError", "type": "Type", "tags": [], - "label": "PerformBulkActionRequestBody", + "label": "KnowledgeBaseEntryDetailsInError", "description": [], "signature": [ - "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }" + "{ id: string; name?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PerformBulkActionRequestBodyInput", + "id": "def-common.KnowledgeBaseEntryErrorSchema", "type": "Type", "tags": [], - "label": "PerformBulkActionRequestBodyInput", + "label": "KnowledgeBaseEntryErrorSchema", "description": [], "signature": [ - "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }" + "{ error: string; message: string; statusCode: number; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PerformBulkActionResponse", + "id": "def-common.KnowledgeBaseEntryResponse", "type": "Type", "tags": [], - "label": "PerformBulkActionResponse", + "label": "KnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" + "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateBody", + "id": "def-common.KnowledgeBaseEntryUpdateProps", "type": "Type", "tags": [], - "label": "PostEvaluateBody", + "label": "KnowledgeBaseEntryUpdateProps", "description": [], "signature": [ - "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateRequestBody", + "id": "def-common.KnowledgeBaseResponse", "type": "Type", "tags": [], - "label": "PostEvaluateRequestBody", - "description": [], + "label": "KnowledgeBaseResponse", + "description": [ + "\nAI assistant KnowledgeBase." + ], "signature": [ - "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + "{ success?: boolean | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateRequestBodyInput", + "id": "def-common.Message", "type": "Type", "tags": [], - "label": "PostEvaluateRequestBodyInput", - "description": [], + "label": "Message", + "description": [ + "\nAI assistant conversation message." + ], "signature": [ - "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + "{ timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateRequestQuery", + "id": "def-common.MessageRole", "type": "Type", "tags": [], - "label": "PostEvaluateRequestQuery", - "description": [], + "label": "MessageRole", + "description": [ + "\nMessage role." + ], "signature": [ - "{ agents: string; models: string; outputIndex: string; datasetName?: string | undefined; evaluationType?: string | undefined; evalModel?: string | undefined; projectName?: string | undefined; runName?: string | undefined; }" + "\"user\" | \"system\" | \"assistant\"" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateRequestQueryInput", + "id": "def-common.MessageRoleEnum", "type": "Type", "tags": [], - "label": "PostEvaluateRequestQueryInput", + "label": "MessageRoleEnum", "description": [], "signature": [ - "{ agents: string; models: string; outputIndex: string; datasetName?: string | undefined; evaluationType?: string | undefined; evalModel?: string | undefined; projectName?: string | undefined; runName?: string | undefined; }" + "{ user: \"user\"; system: \"system\"; assistant: \"assistant\"; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PostEvaluateResponse", + "id": "def-common.Metadata", "type": "Type", "tags": [], - "label": "PostEvaluateResponse", - "description": [], + "label": "Metadata", + "description": [ + "\nMetadata about an Knowledge Base Entry" + ], "signature": [ - "{ success: boolean; evaluationId: string; }" + "{ source: string; required: boolean; kbResource: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.Provider", + "id": "def-common.NonEmptyString", "type": "Type", "tags": [], - "label": "Provider", + "label": "NonEmptyString", "description": [ - "\nProvider" + "\nA string that is not empty and does not contain only whitespace" ], "signature": [ - "\"OpenAI\" | \"Azure OpenAI\"" + "string" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ProviderEnum", + "id": "def-common.NormalizedConversationError", "type": "Type", "tags": [], - "label": "ProviderEnum", + "label": "NormalizedConversationError", "description": [], "signature": [ - "{ OpenAI: \"OpenAI\"; \"Azure OpenAI\": \"Azure OpenAI\"; }" + "{ message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.PUBLIC_API_ACCESS", - "type": "string", + "id": "def-common.NormalizedKnowledgeBaseEntryError", + "type": "Type", "tags": [], - "label": "PUBLIC_API_ACCESS", + "label": "NormalizedKnowledgeBaseEntryError", "description": [], "signature": [ - "\"public\"" + "{ message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ReadConversationRequestParams", + "id": "def-common.OutputIndex", "type": "Type", "tags": [], - "label": "ReadConversationRequestParams", + "label": "OutputIndex", "description": [], "signature": [ - "{ id: string; }" + "string" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ReadConversationRequestParamsInput", + "id": "def-common.PerformBulkActionRequestBody", + "type": "Type", + "tags": [], + "label": "PerformBulkActionRequestBody", + "description": [], + "signature": [ + "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformBulkActionRequestBodyInput", + "type": "Type", + "tags": [], + "label": "PerformBulkActionRequestBodyInput", + "description": [], + "signature": [ + "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformBulkActionResponse", + "type": "Type", + "tags": [], + "label": "PerformBulkActionResponse", + "description": [], + "signature": [ + "{ attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformKnowledgeBaseEntryBulkActionRequestBody", + "type": "Type", + "tags": [], + "label": "PerformKnowledgeBaseEntryBulkActionRequestBody", + "description": [], + "signature": [ + "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformKnowledgeBaseEntryBulkActionRequestBodyInput", + "type": "Type", + "tags": [], + "label": "PerformKnowledgeBaseEntryBulkActionRequestBodyInput", + "description": [], + "signature": [ + "{ delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformKnowledgeBaseEntryBulkActionResponse", + "type": "Type", + "tags": [], + "label": "PerformKnowledgeBaseEntryBulkActionResponse", + "description": [], + "signature": [ + "{ attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateBody", + "type": "Type", + "tags": [], + "label": "PostEvaluateBody", + "description": [], + "signature": [ + "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateRequestBody", + "type": "Type", + "tags": [], + "label": "PostEvaluateRequestBody", + "description": [], + "signature": [ + "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateRequestBodyInput", + "type": "Type", + "tags": [], + "label": "PostEvaluateRequestBodyInput", + "description": [], + "signature": [ + "{ dataset?: { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }[] | undefined; evalPrompt?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateRequestQuery", + "type": "Type", + "tags": [], + "label": "PostEvaluateRequestQuery", + "description": [], + "signature": [ + "{ agents: string; models: string; outputIndex: string; datasetName?: string | undefined; evaluationType?: string | undefined; evalModel?: string | undefined; projectName?: string | undefined; runName?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateRequestQueryInput", + "type": "Type", + "tags": [], + "label": "PostEvaluateRequestQueryInput", + "description": [], + "signature": [ + "{ agents: string; models: string; outputIndex: string; datasetName?: string | undefined; evaluationType?: string | undefined; evalModel?: string | undefined; projectName?: string | undefined; runName?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PostEvaluateResponse", + "type": "Type", + "tags": [], + "label": "PostEvaluateResponse", + "description": [], + "signature": [ + "{ success: boolean; evaluationId: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.Provider", + "type": "Type", + "tags": [], + "label": "Provider", + "description": [ + "\nProvider" + ], + "signature": [ + "\"OpenAI\" | \"Azure OpenAI\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ProviderEnum", + "type": "Type", + "tags": [], + "label": "ProviderEnum", + "description": [], + "signature": [ + "{ OpenAI: \"OpenAI\"; \"Azure OpenAI\": \"Azure OpenAI\"; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PUBLIC_API_ACCESS", + "type": "string", + "tags": [], + "label": "PUBLIC_API_ACCESS", + "description": [], + "signature": [ + "\"public\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadConversationRequestParams", + "type": "Type", + "tags": [], + "label": "ReadConversationRequestParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadConversationRequestParamsInput", "type": "Type", "tags": [], "label": "ReadConversationRequestParamsInput", @@ -2071,6 +2454,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadKnowledgeBaseEntryRequestParams", + "type": "Type", + "tags": [], + "label": "ReadKnowledgeBaseEntryRequestParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadKnowledgeBaseEntryRequestParamsInput", + "type": "Type", + "tags": [], + "label": "ReadKnowledgeBaseEntryRequestParamsInput", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadKnowledgeBaseEntryResponse", + "type": "Type", + "tags": [], + "label": "ReadKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ReadKnowledgeBaseRequestParams", @@ -2109,7 +2537,7 @@ "label": "ReadKnowledgeBaseResponse", "description": [], "signature": [ - "{ elser_exists?: boolean | undefined; index_exists?: boolean | undefined; pipeline_exists?: boolean | undefined; }" + "{ elser_exists?: boolean | undefined; esql_exists?: boolean | undefined; index_exists?: boolean | undefined; is_setup_in_progress?: boolean | undefined; pipeline_exists?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", "deprecated": false, @@ -2156,101 +2584,176 @@ "label": "SortOrderEnum", "description": [], "signature": [ - "{ asc: \"asc\"; desc: \"desc\"; }" + "{ asc: \"asc\"; desc: \"desc\"; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.TraceData", + "type": "Type", + "tags": [], + "label": "TraceData", + "description": [ + "\ntrace Data" + ], + "signature": [ + "{ transactionId?: string | undefined; traceId?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateConversationRequestBody", + "type": "Type", + "tags": [], + "label": "UpdateConversationRequestBody", + "description": [], + "signature": [ + "{ id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateConversationRequestBodyInput", + "type": "Type", + "tags": [], + "label": "UpdateConversationRequestBodyInput", + "description": [], + "signature": [ + "{ id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateConversationRequestParams", + "type": "Type", + "tags": [], + "label": "UpdateConversationRequestParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateConversationRequestParamsInput", + "type": "Type", + "tags": [], + "label": "UpdateConversationRequestParamsInput", + "description": [], + "signature": [ + "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.TraceData", + "id": "def-common.UpdateConversationResponse", "type": "Type", "tags": [], - "label": "TraceData", - "description": [ - "\ntrace Data" - ], + "label": "UpdateConversationResponse", + "description": [], "signature": [ - "{ transactionId?: string | undefined; traceId?: string | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.UpdateConversationRequestBody", + "id": "def-common.UpdateKnowledgeBaseEntryRequestBody", "type": "Type", "tags": [], - "label": "UpdateConversationRequestBody", + "label": "UpdateKnowledgeBaseEntryRequestBody", "description": [], "signature": [ - "{ id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.UpdateConversationRequestBodyInput", + "id": "def-common.UpdateKnowledgeBaseEntryRequestBodyInput", "type": "Type", "tags": [], - "label": "UpdateConversationRequestBodyInput", + "label": "UpdateKnowledgeBaseEntryRequestBodyInput", "description": [], "signature": [ - "{ id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.UpdateConversationRequestParams", + "id": "def-common.UpdateKnowledgeBaseEntryRequestParams", "type": "Type", "tags": [], - "label": "UpdateConversationRequestParams", + "label": "UpdateKnowledgeBaseEntryRequestParams", "description": [], "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.UpdateConversationRequestParamsInput", + "id": "def-common.UpdateKnowledgeBaseEntryRequestParamsInput", "type": "Type", "tags": [], - "label": "UpdateConversationRequestParamsInput", + "label": "UpdateKnowledgeBaseEntryRequestParamsInput", "description": [], "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.UpdateConversationResponse", + "id": "def-common.UpdateKnowledgeBaseEntryResponse", "type": "Type", "tags": [], - "label": "UpdateConversationResponse", + "label": "UpdateKnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2267,7 +2770,7 @@ "signature": [ "{ id?: string | undefined; name?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2284,7 +2787,24 @@ "signature": [ "string" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.Vector", + "type": "Type", + "tags": [], + "label": "Vector", + "description": [ + "\nObject containing Knowledge Base Entry text embeddings and modelId used to create the embeddings" + ], + "signature": [ + "{ modelId: string; tokens: {} & { [k: string]: number; }; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2406,7 +2926,7 @@ "label": "AppendConversationMessageResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2511,7 +3031,7 @@ "label": "BulkCrudActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -2526,7 +3046,7 @@ "label": "BulkCrudActionResults", "description": [], "signature": [ - "Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" + "Zod.ZodObject<{ updated: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -2661,7 +3181,7 @@ "label": "ConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, @@ -2691,356 +3211,581 @@ "label": "ConversationUpdateProps", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateConversationRequestBody", + "type": "Object", + "tags": [], + "label": "CreateConversationRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodOptional; title: Zod.ZodString; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateConversationResponse", + "type": "Object", + "tags": [], + "label": "CreateConversationResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseEntryRequestBody", + "type": "Object", + "tags": [], + "label": "CreateKnowledgeBaseEntryRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ metadata: Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseEntryResponse", + "type": "Object", + "tags": [], + "label": "CreateKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseRequestParams", + "type": "Object", + "tags": [], + "label": "CreateKnowledgeBaseRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ resource: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { resource?: string | undefined; }, { resource?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.CreateKnowledgeBaseResponse", + "type": "Object", + "tags": [], + "label": "CreateKnowledgeBaseResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ success: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { success?: boolean | undefined; }, { success?: boolean | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.Dataset", + "type": "Object", + "tags": [], + "label": "Dataset", + "description": [], + "signature": [ + "Zod.ZodDefault; input: Zod.ZodString; prediction: Zod.ZodOptional; reference: Zod.ZodString; tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }>, \"many\">>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DatasetItem", + "type": "Object", + "tags": [], + "label": "DatasetItem", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodOptional; input: Zod.ZodString; prediction: Zod.ZodOptional; reference: Zod.ZodString; tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.defaultAssistantFeatures", + "type": "Object", + "tags": [], + "label": "defaultAssistantFeatures", + "description": [ + "\nDefault features available to the elastic assistant" + ], + "signature": [ + "{ readonly assistantKnowledgeBaseByDefault: false; readonly assistantModelEvaluation: false; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteConversationRequestParams", + "type": "Object", + "tags": [], + "label": "DeleteConversationRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteConversationResponse", + "type": "Object", + "tags": [], + "label": "DeleteConversationResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseEntryRequestParams", + "type": "Object", + "tags": [], + "label": "DeleteKnowledgeBaseEntryRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseEntryResponse", + "type": "Object", + "tags": [], + "label": "DeleteKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseRequestParams", + "type": "Object", + "tags": [], + "label": "DeleteKnowledgeBaseRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ resource: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { resource?: string | undefined; }, { resource?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DeleteKnowledgeBaseResponse", + "type": "Object", + "tags": [], + "label": "DeleteKnowledgeBaseResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ success: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { success?: boolean | undefined; }, { success?: boolean | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.CreateConversationRequestBody", + "id": "def-common.ErrorSchema", "type": "Object", "tags": [], - "label": "CreateConversationRequestBody", + "label": "ErrorSchema", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodOptional; title: Zod.ZodString; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodOptional; error: Zod.ZodObject<{ status_code: Zod.ZodNumber; message: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; }, { message: string; status_code: number; }>; }, \"strict\", Zod.ZodTypeAny, { error: { message: string; status_code: number; }; id?: string | undefined; }, { error: { message: string; status_code: number; }; id?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.CreateConversationResponse", + "id": "def-common.ExecuteConnectorRequestBody", "type": "Object", "tags": [], - "label": "CreateConversationResponse", + "label": "ExecuteConnectorRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ conversationId: Zod.ZodOptional; message: Zod.ZodOptional; model: Zod.ZodOptional; subAction: Zod.ZodEnum<[\"invokeAI\", \"invokeStream\"]>; actionTypeId: Zod.ZodString; alertsIndexPattern: Zod.ZodOptional; allow: Zod.ZodOptional>; allowReplacement: Zod.ZodOptional>; isEnabledKnowledgeBase: Zod.ZodOptional; isEnabledRAGAlerts: Zod.ZodOptional; replacements: Zod.ZodObject<{}, \"strip\", Zod.ZodString, Zod.objectOutputType<{}, Zod.ZodString, \"strip\">, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>; size: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; langSmithApiKey: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; conversationId?: string | undefined; message?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allow?: string[] | undefined; allowReplacement?: string[] | undefined; isEnabledKnowledgeBase?: boolean | undefined; isEnabledRAGAlerts?: boolean | undefined; size?: number | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; conversationId?: string | undefined; message?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allow?: string[] | undefined; allowReplacement?: string[] | undefined; isEnabledKnowledgeBase?: boolean | undefined; isEnabledRAGAlerts?: boolean | undefined; size?: number | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.CreateKnowledgeBaseRequestParams", + "id": "def-common.ExecuteConnectorRequestParams", "type": "Object", "tags": [], - "label": "CreateKnowledgeBaseRequestParams", + "label": "ExecuteConnectorRequestParams", "description": [], "signature": [ - "Zod.ZodObject<{ resource: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { resource?: string | undefined; }, { resource?: string | undefined; }>" + "Zod.ZodObject<{ connectorId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; }, { connectorId: string; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.CreateKnowledgeBaseResponse", + "id": "def-common.ExecuteConnectorResponse", "type": "Object", "tags": [], - "label": "CreateKnowledgeBaseResponse", + "label": "ExecuteConnectorResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { success?: boolean | undefined; }, { success?: boolean | undefined; }>" + "Zod.ZodObject<{ data: Zod.ZodString; connector_id: Zod.ZodString; status: Zod.ZodString; trace_data: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { status: string; data: string; connector_id: string; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { status: string; data: string; connector_id: string; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.Dataset", + "id": "def-common.FindConversationsRequestQuery", "type": "Object", "tags": [], - "label": "Dataset", + "label": "FindConversationsRequestQuery", "description": [], "signature": [ - "Zod.ZodDefault; input: Zod.ZodString; prediction: Zod.ZodOptional; reference: Zod.ZodString; tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }>, \"many\">>" + "Zod.ZodObject<{ fields: Zod.ZodOptional, string[], unknown>>; filter: Zod.ZodOptional; sort_field: Zod.ZodOptional>; sort_order: Zod.ZodOptional>; page: Zod.ZodDefault>; per_page: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { per_page: number; page: number; fields?: string[] | undefined; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; }, { fields?: unknown; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; page?: number | undefined; per_page?: number | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.DatasetItem", + "id": "def-common.FindConversationsResponse", "type": "Object", "tags": [], - "label": "DatasetItem", + "label": "FindConversationsResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodOptional; input: Zod.ZodString; prediction: Zod.ZodOptional; reference: Zod.ZodString; tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }, { input: string; reference: string; id?: string | undefined; prediction?: string | undefined; tags?: string[] | undefined; }>" + "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.defaultAssistantFeatures", + "id": "def-common.FindConversationsSortField", "type": "Object", "tags": [], - "label": "defaultAssistantFeatures", - "description": [ - "\nDefault features available to the elastic assistant" - ], + "label": "FindConversationsSortField", + "description": [], "signature": [ - "{ readonly assistantModelEvaluation: false; }" + "Zod.ZodEnum<[\"created_at\", \"is_default\", \"title\", \"updated_at\"]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.DeleteConversationRequestParams", + "id": "def-common.FindConversationsSortFieldEnum", "type": "Object", "tags": [], - "label": "DeleteConversationRequestParams", + "label": "FindConversationsSortFieldEnum", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" + "{ title: \"title\"; updated_at: \"updated_at\"; created_at: \"created_at\"; is_default: \"is_default\"; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.DeleteConversationResponse", + "id": "def-common.FindCurrentUserConversationsRequestQuery", "type": "Object", "tags": [], - "label": "DeleteConversationResponse", + "label": "FindCurrentUserConversationsRequestQuery", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ fields: Zod.ZodOptional, string[], unknown>>; filter: Zod.ZodOptional; sort_field: Zod.ZodOptional>; sort_order: Zod.ZodOptional>; page: Zod.ZodDefault>; per_page: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { per_page: number; page: number; fields?: string[] | undefined; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; }, { fields?: unknown; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; page?: number | undefined; per_page?: number | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.DeleteKnowledgeBaseRequestParams", + "id": "def-common.FindCurrentUserConversationsResponse", "type": "Object", "tags": [], - "label": "DeleteKnowledgeBaseRequestParams", + "label": "FindCurrentUserConversationsResponse", "description": [], "signature": [ - "Zod.ZodObject<{ resource: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { resource?: string | undefined; }, { resource?: string | undefined; }>" + "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.DeleteKnowledgeBaseResponse", + "id": "def-common.GetCapabilitiesResponse", "type": "Object", "tags": [], - "label": "DeleteKnowledgeBaseResponse", + "label": "GetCapabilitiesResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { success?: boolean | undefined; }, { success?: boolean | undefined; }>" + "Zod.ZodObject<{ assistantKnowledgeBaseByDefault: Zod.ZodBoolean; assistantModelEvaluation: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { assistantKnowledgeBaseByDefault: boolean; assistantModelEvaluation: boolean; }, { assistantKnowledgeBaseByDefault: boolean; assistantModelEvaluation: boolean; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ErrorSchema", + "id": "def-common.GetEvaluateResponse", "type": "Object", "tags": [], - "label": "ErrorSchema", + "label": "GetEvaluateResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodOptional; error: Zod.ZodObject<{ status_code: Zod.ZodNumber; message: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; }, { message: string; status_code: number; }>; }, \"strict\", Zod.ZodTypeAny, { error: { message: string; status_code: number; }; id?: string | undefined; }, { error: { message: string; status_code: number; }; id?: string | undefined; }>" + "Zod.ZodObject<{ agentExecutors: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { agentExecutors: string[]; }, { agentExecutors: string[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/get_evaluate_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ExecuteConnectorRequestBody", + "id": "def-common.KnowledgeBaseEntryBulkActionBase", "type": "Object", "tags": [], - "label": "ExecuteConnectorRequestBody", + "label": "KnowledgeBaseEntryBulkActionBase", "description": [], "signature": [ - "Zod.ZodObject<{ conversationId: Zod.ZodOptional; message: Zod.ZodOptional; model: Zod.ZodOptional; subAction: Zod.ZodEnum<[\"invokeAI\", \"invokeStream\"]>; actionTypeId: Zod.ZodString; alertsIndexPattern: Zod.ZodOptional; allow: Zod.ZodOptional>; allowReplacement: Zod.ZodOptional>; isEnabledKnowledgeBase: Zod.ZodOptional; isEnabledRAGAlerts: Zod.ZodOptional; replacements: Zod.ZodObject<{}, \"strip\", Zod.ZodString, Zod.objectOutputType<{}, Zod.ZodString, \"strip\">, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>; size: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; langSmithApiKey: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; conversationId?: string | undefined; message?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allow?: string[] | undefined; allowReplacement?: string[] | undefined; isEnabledKnowledgeBase?: boolean | undefined; isEnabledRAGAlerts?: boolean | undefined; size?: number | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; conversationId?: string | undefined; message?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allow?: string[] | undefined; allowReplacement?: string[] | undefined; isEnabledKnowledgeBase?: boolean | undefined; isEnabledRAGAlerts?: boolean | undefined; size?: number | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }>" + "Zod.ZodObject<{ query: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { query?: string | undefined; ids?: string[] | undefined; }, { query?: string | undefined; ids?: string[] | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ExecuteConnectorRequestParams", + "id": "def-common.KnowledgeBaseEntryBulkActionSkipReason", "type": "Object", "tags": [], - "label": "ExecuteConnectorRequestParams", + "label": "KnowledgeBaseEntryBulkActionSkipReason", "description": [], "signature": [ - "Zod.ZodObject<{ connectorId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; }, { connectorId: string; }>" + "Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.ExecuteConnectorResponse", + "id": "def-common.KnowledgeBaseEntryBulkActionSkipResult", "type": "Object", "tags": [], - "label": "ExecuteConnectorResponse", + "label": "KnowledgeBaseEntryBulkActionSkipResult", "description": [], "signature": [ - "Zod.ZodObject<{ data: Zod.ZodString; connector_id: Zod.ZodString; status: Zod.ZodString; trace_data: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { status: string; data: string; connector_id: string; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { status: string; data: string; connector_id: string; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; name: Zod.ZodOptional; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindConversationsRequestQuery", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionResponse", "type": "Object", "tags": [], - "label": "FindConversationsRequestQuery", + "label": "KnowledgeBaseEntryBulkCrudActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ fields: Zod.ZodOptional, string[], unknown>>; filter: Zod.ZodOptional; sort_field: Zod.ZodOptional>; sort_order: Zod.ZodOptional>; page: Zod.ZodDefault>; per_page: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { per_page: number; page: number; fields?: string[] | undefined; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; }, { fields?: unknown; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; page?: number | undefined; per_page?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindConversationsResponse", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionResults", "type": "Object", "tags": [], - "label": "FindConversationsResponse", + "label": "KnowledgeBaseEntryBulkCrudActionResults", "description": [], "signature": [ - "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" + "Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindConversationsSortField", + "id": "def-common.KnowledgeBaseEntryBulkCrudActionSummary", "type": "Object", "tags": [], - "label": "FindConversationsSortField", + "label": "KnowledgeBaseEntryBulkCrudActionSummary", "description": [], "signature": [ - "Zod.ZodEnum<[\"created_at\", \"is_default\", \"title\", \"updated_at\"]>" + "Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindConversationsSortFieldEnum", + "id": "def-common.KnowledgeBaseEntryCreateProps", "type": "Object", "tags": [], - "label": "FindConversationsSortFieldEnum", + "label": "KnowledgeBaseEntryCreateProps", "description": [], "signature": [ - "{ title: \"title\"; updated_at: \"updated_at\"; created_at: \"created_at\"; is_default: \"is_default\"; }" + "Zod.ZodObject<{ metadata: Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindCurrentUserConversationsRequestQuery", + "id": "def-common.KnowledgeBaseEntryDetailsInError", "type": "Object", "tags": [], - "label": "FindCurrentUserConversationsRequestQuery", + "label": "KnowledgeBaseEntryDetailsInError", "description": [], "signature": [ - "Zod.ZodObject<{ fields: Zod.ZodOptional, string[], unknown>>; filter: Zod.ZodOptional; sort_field: Zod.ZodOptional>; sort_order: Zod.ZodOptional>; page: Zod.ZodDefault>; per_page: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { per_page: number; page: number; fields?: string[] | undefined; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; }, { fields?: unknown; filter?: string | undefined; sort_field?: \"title\" | \"updated_at\" | \"created_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; page?: number | undefined; per_page?: number | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.FindCurrentUserConversationsResponse", + "id": "def-common.KnowledgeBaseEntryErrorSchema", "type": "Object", "tags": [], - "label": "FindCurrentUserConversationsResponse", + "label": "KnowledgeBaseEntryErrorSchema", "description": [], "signature": [ - "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" + "Zod.ZodObject<{ statusCode: Zod.ZodNumber; error: Zod.ZodString; message: Zod.ZodString; }, \"strict\", Zod.ZodTypeAny, { error: string; message: string; statusCode: number; }, { error: string; message: string; statusCode: number; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.GetCapabilitiesResponse", + "id": "def-common.KnowledgeBaseEntryResponse", "type": "Object", "tags": [], - "label": "GetCapabilitiesResponse", + "label": "KnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ assistantModelEvaluation: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { assistantModelEvaluation: boolean; }, { assistantModelEvaluation: boolean; }>" + "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/elastic-assistant-common", - "id": "def-common.GetEvaluateResponse", + "id": "def-common.KnowledgeBaseEntryUpdateProps", "type": "Object", "tags": [], - "label": "GetEvaluateResponse", + "label": "KnowledgeBaseEntryUpdateProps", "description": [], "signature": [ - "Zod.ZodObject<{ agentExecutors: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { agentExecutors: string[]; }, { agentExecutors: string[]; }>" + "Zod.ZodObject<{ id: Zod.ZodString; metadata: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/evaluation/get_evaluate_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3105,6 +3850,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.Metadata", + "type": "Object", + "tags": [], + "label": "Metadata", + "description": [], + "signature": [ + "Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.NonEmptyString", @@ -3115,7 +3875,7 @@ "signature": [ "Zod.ZodString" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3135,6 +3895,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.NormalizedKnowledgeBaseEntryError", + "type": "Object", + "tags": [], + "label": "NormalizedKnowledgeBaseEntryError", + "description": [], + "signature": [ + "Zod.ZodObject<{ message: Zod.ZodString; statusCode: Zod.ZodNumber; err_code: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.OutputIndex", @@ -3158,7 +3933,7 @@ "label": "PerformBulkActionRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ delete: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { query?: string | undefined; ids?: string[] | undefined; }, { query?: string | undefined; ids?: string[] | undefined; }>>; create: Zod.ZodOptional; title: Zod.ZodString; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>, \"many\">>; update: Zod.ZodOptional; title: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }>" + "Zod.ZodObject<{ delete: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { query?: string | undefined; ids?: string[] | undefined; }, { query?: string | undefined; ids?: string[] | undefined; }>>; create: Zod.ZodOptional; title: Zod.ZodString; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>, \"many\">>; update: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { title: string; id?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; update?: { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }[] | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -3173,13 +3948,43 @@ "label": "PerformBulkActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformKnowledgeBaseEntryBulkActionRequestBody", + "type": "Object", + "tags": [], + "label": "PerformKnowledgeBaseEntryBulkActionRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ delete: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { query?: string | undefined; ids?: string[] | undefined; }, { query?: string | undefined; ids?: string[] | undefined; }>>; create: Zod.ZodOptional; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>, \"many\">>; update: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; }, { delete?: { query?: string | undefined; ids?: string[] | undefined; } | undefined; create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.PerformKnowledgeBaseEntryBulkActionResponse", + "type": "Object", + "tags": [], + "label": "PerformKnowledgeBaseEntryBulkActionResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; statusCode?: number | undefined; message?: string | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.PostEvaluateBody", @@ -3293,7 +4098,7 @@ "label": "ReadConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -3315,6 +4120,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadKnowledgeBaseEntryRequestParams", + "type": "Object", + "tags": [], + "label": "ReadKnowledgeBaseEntryRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ReadKnowledgeBaseEntryResponse", + "type": "Object", + "tags": [], + "label": "ReadKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ReadKnowledgeBaseRequestParams", @@ -3338,7 +4173,7 @@ "label": "ReadKnowledgeBaseResponse", "description": [], "signature": [ - "Zod.ZodObject<{ elser_exists: Zod.ZodOptional; index_exists: Zod.ZodOptional; pipeline_exists: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { elser_exists?: boolean | undefined; index_exists?: boolean | undefined; pipeline_exists?: boolean | undefined; }, { elser_exists?: boolean | undefined; index_exists?: boolean | undefined; pipeline_exists?: boolean | undefined; }>" + "Zod.ZodObject<{ elser_exists: Zod.ZodOptional; esql_exists: Zod.ZodOptional; index_exists: Zod.ZodOptional; is_setup_in_progress: Zod.ZodOptional; pipeline_exists: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { elser_exists?: boolean | undefined; esql_exists?: boolean | undefined; index_exists?: boolean | undefined; is_setup_in_progress?: boolean | undefined; pipeline_exists?: boolean | undefined; }, { elser_exists?: boolean | undefined; esql_exists?: boolean | undefined; index_exists?: boolean | undefined; is_setup_in_progress?: boolean | undefined; pipeline_exists?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts", "deprecated": false, @@ -3413,7 +4248,7 @@ "label": "UpdateConversationRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodOptional; category: Zod.ZodOptional>; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; excludeFromLastConversationStorage: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; }, \"strip\", Zod.ZodTypeAny, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { id: string; title?: string | undefined; category?: \"assistant\" | \"insights\" | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; excludeFromLastConversationStorage?: boolean | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -3443,13 +4278,58 @@ "label": "UpdateConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodString; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateKnowledgeBaseEntryRequestBody", + "type": "Object", + "tags": [], + "label": "UpdateKnowledgeBaseEntryRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; metadata: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateKnowledgeBaseEntryRequestParams", + "type": "Object", + "tags": [], + "label": "UpdateKnowledgeBaseEntryRequestParams", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.UpdateKnowledgeBaseEntryResponse", + "type": "Object", + "tags": [], + "label": "UpdateKnowledgeBaseEntryResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.User", @@ -3460,7 +4340,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3475,7 +4355,22 @@ "signature": [ "Zod.ZodString" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.Vector", + "type": "Object", + "tags": [], + "label": "Vector", + "description": [], + "signature": [ + "Zod.ZodObject<{ modelId: Zod.ZodString; tokens: Zod.ZodObject<{}, \"strip\", Zod.ZodNumber, Zod.objectOutputType<{}, Zod.ZodNumber, \"strip\">, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 1d9c881ebc3792..c95ae25621c1d4 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 232 | 0 | 217 | 2 | +| 292 | 0 | 275 | 2 | ## Common diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 7fdc3856050d66..c8068f130323f5 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 7509c63e779217..0b891eac21e047 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-05-20 +date: 2024-05-21 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 f6680c048cf14d..f4521b9e0519dc 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-05-20 +date: 2024-05-21 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 f49662d452cedb..5b487d15a74edc 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-05-20 +date: 2024-05-21 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 1f865d800f1539..ef230fb2caa566 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-05-20 +date: 2024-05-21 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 8a65e5353d999a..75bd54bb5e03d7 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-05-20 +date: 2024-05-21 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 f9894eb340d787..a82365ccf611cc 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index c73424f7578d0c..a39f3065d1eac4 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 3185b83461179a..f3c998884a896e 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 6891661b0b28c7..87feb70fbb2e17 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index bee7e2673330fd..3d0db8b60a940a 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index a0edca96484e44..84b08242a3fca1 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 4f18c95f49ca23..a228c6a5901dc5 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-05-20 +date: 2024-05-21 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 8b92a98dab6e5f..0c2f3e8ec37b74 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index e1cb1259a8b1bc..76e59c32be8158 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 3724a34fad00ba..d282d1c2aeb4dd 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 648c023f14d6f8..0f0c0ee6abc665 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index b545e7c3c5b34c..3cbc4a371f9f74 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 6681c12e8d1114..a22bb1077409c0 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 9ac51a310dad37..d986b4cddb4da4 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-05-20 +date: 2024-05-21 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 068cf2df7e15f6..acc4216cfd14c0 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-05-20 +date: 2024-05-21 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 62cc1c4471aa09..a3afaa8688bd8a 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 4ccfe0bb2217bf..bf33556e701277 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-05-20 +date: 2024-05-21 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 434c0ea1c88f6c..2223b76edfdb9e 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-05-20 +date: 2024-05-21 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 e4c64d5be26254..b01ab6b978882a 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 bc245facc9d6b6..8128d464b2ce07 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-05-20 +date: 2024-05-21 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 f5260f6eb7e11b..99a630d87846f8 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-05-20 +date: 2024-05-21 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 bb719406e334ee..ca85071e52256a 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-05-20 +date: 2024-05-21 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 a0bfa7bf67e25a..a5c5f5e1d27b68 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-05-20 +date: 2024-05-21 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 7c4c02c29dede3..04b47f7bb3f72e 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-05-20 +date: 2024-05-21 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 eaa27c6b9303a5..64749bcfea3cc4 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index aad52fba0f7829..5d4beaa509b87d 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index dae37620023b2d..8407042d9ad52e 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 8252010eecb303..d5bafab1cea7a9 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-05-20 +date: 2024-05-21 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 13232cc3f0076c..89d94690345d04 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-05-20 +date: 2024-05-21 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 387b707ef33bf4..526565a66cc5ab 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 5e5cf0f6b75704..5beea129bddeac 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 9d53dc3928e035..ffd604ba05980b 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-05-20 +date: 2024-05-21 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 a88d3370f87374..9177b3f7a478c6 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-05-20 +date: 2024-05-21 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 70a94bda1b19d7..cd2cbfefda569d 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-05-20 +date: 2024-05-21 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 73e8a08a8db27c..6db3608739086d 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-05-20 +date: 2024-05-21 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 b5e3a51ddc953e..f9c100fb6f5245 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index d7cff9a6985931..20308e29a86f19 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 06dae205273db2..59d0eb9a98c012 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index fa0cc30a662796..9f4b1b0f6e9d52 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-05-20 +date: 2024-05-21 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 3a2c914d8972f8..ad241ca1f0bbc3 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index c853f7684ffdf5..ba1ed293c4ac56 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index bb5564aa4a8ed1..bcba2e117a3717 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-05-20 +date: 2024-05-21 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 a26885eaf8dfce..75ea29f30e33e8 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 9a8776cf9eac44..033758814732dd 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 20fab4480b4df6..cff9bbbea40a46 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 3319f91551d56b..1b822e466ba12d 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 0103222f036d75..6eb56e3d291180 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index d095a0f3ce8a3b..1d8a552cadddc9 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 0395cea5320713..f6ee4ba51530b3 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 1ab0cdfdfc766b..e7dd36cc5e884d 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index c1568de1b76f52..32acc3c9460a9e 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 108d8de81ef671..3b13f9f9cfc94a 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 3f1ebe9b732742..aaa1a2ea01aea8 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 721d1e5c06122c..ab949c4fe63c6d 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-05-20 +date: 2024-05-21 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 f36575c2e9e0fc..607e8ad93e8c69 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-05-20 +date: 2024-05-21 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 944c37620fca09..48dcf191e2a5f9 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 691f13089edfc5..5b0391677c27d9 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 4627bcb5da05d3..a4719ed1fb369b 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index c534bb98129bf6..2a7e4d2646c052 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index cf13409ca1bc2d..caa2bc8a6550a9 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 96ef4dce826c21..9e3beedba8c7f8 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 2e815aec2dfbac..58cc18a17601b5 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 06944e51e96fe7..d0153121d002cd 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-05-20 +date: 2024-05-21 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 54c601b060b362..43346c4345f6cc 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-05-20 +date: 2024-05-21 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 726a77c042d8ee..37c1e3020d8ba1 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 bb0a28fae804bd..3d5426a6f84801 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 8256a5b17dcccf..ce43fa84d454cb 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 7d2b3849c30b2f..1b357c909e9e9d 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-05-20 +date: 2024-05-21 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 6727da83c11385..c77a899de6f35c 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-05-20 +date: 2024-05-21 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 ab24b887d9836c..b9ad7724e8d913 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-05-20 +date: 2024-05-21 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 eec4d49078e269..0648e4dad5f1ca 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-05-20 +date: 2024-05-21 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 1038de63310e55..606325647378aa 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-05-20 +date: 2024-05-21 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 e1abbae79cd0af..004b183eed483a 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 e342bce4e66e60..9b537619c788fe 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 304cbc9d0c8a9a..3c747ce5ee2b67 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 210206057ace26..71b2c76f12989d 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 0387d847c8dab6..4928db33f402c1 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 6fcda645376cf1..55f1499da98e92 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 75a6555735baf4..f207b7ae6d3274 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 461abb8754801a..203c142cd9e88c 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index caae8ac2098148..86a93ac6c69426 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 14fab7aad9c26f..5e05f45d052583 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index d1435c05242540..743fbd4e01fc80 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index f3f7c2bf7b17a7..6e3f5cf96a1fa1 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-05-20 +date: 2024-05-21 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 54bda828e2d26e..07a69caaeb5f3f 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-05-20 +date: 2024-05-21 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 9ddf3b925a45ee..1c0a8bb2dd60e1 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index b0feb7bea04228..5f6eb2259aaaa9 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 0acc2281d3ff6a..d8c566b576a62c 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index a64760faad9d0e..19a42d5096c76a 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 693f3c620391c3..18991824099ae6 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 0b4676e4d5f19c..f7e7b6a350ea42 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-05-20 +date: 2024-05-21 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 ffc91d2c719a90..2789cac9c734f8 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-05-20 +date: 2024-05-21 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 0f64d776b1c112..7a9faa054b1d64 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index d9947f1d9738ef..5a0a828fb78170 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 20f1726a4795e2..cff368f3cad0cf 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 8a3b0fe93837d5..e7b7af97ac1248 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 1db3f00e4c792c..7ddc4f94b02ef5 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-05-20 +date: 2024-05-21 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 bcd1f927c30172..c974b208e1eec5 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 82745e95339987..4ea9e2f0f08766 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 1d69b3c6d2a67f..71ec8729977367 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 275f30a38fd66d..b86c6216a3617b 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index fe29e85ae2aa93..95970c71d77e86 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-05-20 +date: 2024-05-21 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 e356efd3688015..94df61ce58fb7e 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 99a18383928509..d6f3e4ab51c289 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 4188949e59a4bf..7e4fd84b0dd732 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 4a873f05cace4b..c3c2363853acf9 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index d06e602a384c71..4903d3ff200ec6 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 9d153e136ade3f..30fc075e948127 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index b68c77b1d2427d..601380c9d30637 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 9afddbcc77bf07..b8c1ed9b629a21 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 35f66c28ca036f..7c8226e47817bc 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-05-20 +date: 2024-05-21 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 a2315e36827ebb..5032dc97505e5f 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-05-20 +date: 2024-05-21 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 60709c8d761753..b2c89a60dc001c 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-05-20 +date: 2024-05-21 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 46edbf94b0306f..f415829ca441a3 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-05-20 +date: 2024-05-21 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 6110843c5551b5..d4424d80724c75 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 3e20af5537dbde..339b93b9d599dd 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 6758cba46782ac..9407f1cd9cc65c 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index cbae61c8704be3..4033cbae6925e8 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index e8bf737e0cf4d4..cfa15734e61387 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 6fcc103f5a36d8..949ea71ede2e3b 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 0c83de45b0f789..c24cdf7a5a9dc8 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index e0306685b7dd72..15bf5b14f49299 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 31fc719ea844e9..2ed17ef65747f8 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index db9e3868a90986..223a125969feba 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 057e3b42165763..3b96ee0fdd4a0b 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 75ff9919b52168..b8ef05166ff557 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 7593302c72d337..7291985160ab90 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index a1484971540050..084e9a243d01e0 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 00624f80bdc874..3fcb2fd285ac04 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 434774814e5e1a..38b5ff19ed52b6 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-05-20 +date: 2024-05-21 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 660759341c092b..888d69812ca64a 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 885459bb554775..f55586147a8210 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index d83b26f6fc7081..ec495860f14a77 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 1eda416fa3a51d..460cbff5d5d255 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index cf687aaae3b143..fb0bb6e677dcab 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 343eb75e8bcc33..25146713b03dd6 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 8166b5a31026a9..8cacb8ade56c83 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 88ba7c3a0a52cc..8157c0884f1cc6 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 519bec9afc8179..f000ccc42caae2 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index bf526f1d45a54f..ba347a206fe75a 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index f32b2f136dab71..89c9ac6cd97bcb 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 068253b884d66b..a43bfacae6f644 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 7e68576b0b1d9e..e9badc5d6cac8e 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index d706a7302fe4ba..653250fe99fd71 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index a72a4ccc8522c7..f83c503b64299b 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-05-20 +date: 2024-05-21 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 7b2b9cd6e792f4..6a0eac2642c10f 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-05-20 +date: 2024-05-21 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 ed2d948903f0c0..660ab0230136d3 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-05-20 +date: 2024-05-21 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 562c5faaf5a03c..532d67a98fd189 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-05-20 +date: 2024-05-21 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 c550f218f43e87..7e81990af0b8b4 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-05-20 +date: 2024-05-21 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 75db667e949f44..05c9ab731280f1 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 e9a6389ff2b3fb..01cf68e33b84ce 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-05-20 +date: 2024-05-21 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 d8e4fcbf3ddde5..02e0b0a95961d8 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-20 +date: 2024-05-21 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 ab9bc1108f5d2a..f8bff7aa55dab8 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 1b3a7c22fecd54..d0f007dee697b1 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-05-20 +date: 2024-05-21 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 c572a1ce3de722..2b40838f0d2fdf 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-05-20 +date: 2024-05-21 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 a2e076c65d1fb4..286a9ca79e9dc5 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-05-20 +date: 2024-05-21 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 e66309cab986be..4b0b418d191780 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 35a57a3d6078a0..76bb5bbe729d35 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-05-20 +date: 2024-05-21 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 63afb89f8fee0f..36a6f3836682ca 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-05-20 +date: 2024-05-21 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 4ea6135b018d41..83f5de34101a20 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-05-20 +date: 2024-05-21 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 5a9ad6150157a4..cb089318f279e6 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 8cf96bfc154bd7..217749ae6b242f 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-05-20 +date: 2024-05-21 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 63c046237caf1e..314fc7966796c7 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-05-20 +date: 2024-05-21 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 ca6f7abd6e5b5b..332cb7785097d5 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-05-20 +date: 2024-05-21 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 f34a671c1a48c1..9c6bd063d2fb31 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-05-20 +date: 2024-05-21 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 01e8f7843532e0..d15daf35119f6e 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 745260e4a94f86..d02355f1864141 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index d9c17089ddc899..f278f70cc70f26 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index a5b47a9080ee12..7a7c0e4abc7100 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index b89a43151117aa..70a990dc86cd93 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 4b79a918b03e82..551c17688ad187 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index d239e446791a43..c39c74d3ff1ba0 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-05-20 +date: 2024-05-21 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 0659128adf42d3..86cf4c058b955a 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-05-20 +date: 2024-05-21 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 21f93739bcc4ee..24b8f05da38f15 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 62a7052d3e1300..74ab7e60cda0ff 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 8bc05e22be7ef8..a18d6af5e882fc 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-05-20 +date: 2024-05-21 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 153598bbb2a55f..63a2c8fe5fd084 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-05-20 +date: 2024-05-21 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 f819a384e2403d..b341e88a3d8778 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 1618dea67537df..808c8d9cda2a97 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index d265a68b65e4c1..0db6ccd92b6eb2 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 18f0b044001b16..d93851ce90686e 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-05-20 +date: 2024-05-21 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 b2fedf50c82d0c..5a97b86666e116 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-05-20 +date: 2024-05-21 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 6ffe0d1b1930fe..5faf659d905dd0 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 2fdf7b0760c59e..55a6625c449aac 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 682990dc1a483a..9f971c48c33ad0 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-05-20 +date: 2024-05-21 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 6e66f71e5d71b7..ce556ce22cc7e6 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-05-20 +date: 2024-05-21 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 32692d3f3b59eb..1f21e1d670bec6 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-05-20 +date: 2024-05-21 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 a1c70d25a25279..f067810bc2d3c0 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-05-20 +date: 2024-05-21 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 591bb419eef5a7..d9399fce8faa26 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-05-20 +date: 2024-05-21 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 c4ad07d9702e64..06c0bb75f57cf7 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 27828e3a97c769..c40015c0e48bb9 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-05-20 +date: 2024-05-21 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 824cd38f2b0b11..c68bc901132936 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 58368a6162f8db..54c8a70a62f7a0 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-05-20 +date: 2024-05-21 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 14c974ba11a34f..afb6fc91a4b3cf 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 87eb0d4ae5c7bf..42a9f4bc40d44b 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-05-20 +date: 2024-05-21 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 9d8a19a7c71c7a..b9001a5b6562e7 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 e48dcb987f647e..a80f86e84b440d 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-05-20 +date: 2024-05-21 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 567f2431b390c5..def79731a44b30 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 8887812c450271..e23cd0e458d21d 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-05-20 +date: 2024-05-21 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 b7fd2434c980be..e1a07a41863e35 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-05-20 +date: 2024-05-21 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 22946e98f94b9d..bcc33ef23f60cf 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 3732f6e44771d3..c141686b0f4494 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 67406176211cda..116511392c8558 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-05-20 +date: 2024-05-21 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 919798b6b1de33..0a0f23d25c835a 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-05-20 +date: 2024-05-21 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 7394c69d76951c..fe4d4fe45a7c2c 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 f9d71f1f23424c..bfc99f1e3e562b 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-05-20 +date: 2024-05-21 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 59886686b30d6a..c65af1d3f2f0c4 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-05-20 +date: 2024-05-21 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 9def918de0020a..fd7b319b92e430 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-05-20 +date: 2024-05-21 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 041e9720f7984b..4e83b507442b8e 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-05-20 +date: 2024-05-21 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 d6354898109569..0e55028a8e69d4 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index c92a246c73fd5e..f6876cee8ce44e 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 37fd11222f5f76..909334a0459456 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-05-20 +date: 2024-05-21 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 de52d4d13f3b19..df0ebe958efd6e 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index a6aeaf2d1ce3c5..d3a07478fbccab 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index dadd3bdcfcf295..f03a5a1d079de3 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 01879167d24faa..c1ca7f2b592250 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 508f27f6014b1e..5e3d92d0eed19f 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index ac15d2dd748cf6..d421765ab72a93 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-05-20 +date: 2024-05-21 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 941fa8455045d5..6bb9e16750ece4 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-05-20 +date: 2024-05-21 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 fed8552a412dc8..3f3e7fd57adc9b 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-05-20 +date: 2024-05-21 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 f5e5d74c37a4f0..592837eca21dfa 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-05-20 +date: 2024-05-21 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 3e987fbad81eb7..593f861fc50e5e 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index fde3359592ba7b..656d929693e797 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 9ef0f4ff4cb606..760a031039f29d 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-05-20 +date: 2024-05-21 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 7b652eb750e236..025ab7746b3c0d 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-05-20 +date: 2024-05-21 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 0db2cf9271d3de..1fa7571b091bf8 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index cbe053404428e3..e3673f40c89307 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 1607c7d6d7f03b..5bcc258f976d9c 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 98bf9927a42a30..a3790c5c66e637 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 6e28c672fca2af..f3fbd7a8222606 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index fd2243c251a09d..63f1e28f36b50f 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-05-20 +date: 2024-05-21 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 9cb2ec1eda3677..e49d7a3a002b90 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-05-20 +date: 2024-05-21 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 653baa42b1a7ca..82f59ae75608a5 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-05-20 +date: 2024-05-21 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 b59daa1a3d4ed8..39f5d54bcd4e0d 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-05-20 +date: 2024-05-21 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 27f5011c2f8616..3273f9c3690cbc 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index b3b3f0aa1b6487..dd5f8233a55ad2 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 8072d683064a05..64b920ded08ec6 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 81be1b3177f531..2f79aa802ee12a 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 63f58848e66ff6..fe471c35c68eb4 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index ac7a20c6b72e6e..8b96d8a006ab4a 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.devdocs.json b/api_docs/kbn_user_profile_components.devdocs.json index 860936ef0b970f..541125e5db4364 100644 --- a/api_docs/kbn_user_profile_components.devdocs.json +++ b/api_docs/kbn_user_profile_components.devdocs.json @@ -1403,7 +1403,9 @@ "EuiSelectableOptionCheckedType", "; disabled?: boolean | undefined; isGroupLabel?: false | undefined; prepend?: React.ReactNode; append?: React.ReactNode; ref?: ((optionIndex: number) => void) | undefined; id?: undefined; data?: { [key: string]: any; } | undefined; textWrap?: \"wrap\" | \"truncate\" | undefined; truncationProps?: Partial> | undefined; } & React.HTMLAttributes) | (", + ", \"text\" | \"children\">> | undefined; toolTipContent?: React.ReactNode; toolTipProps?: Partial> | undefined; } & React.HTMLAttributes) | (", "DisambiguateSet", "<", "EuiSelectableLIOption", diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index db5b8249ff3ed2..fd882d49ff8780 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-05-20 +date: 2024-05-21 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 233ae9ef55e137..bc0d868699cbaa 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-05-20 +date: 2024-05-21 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 a762b3b6da30d9..c2426602bcb4a4 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-05-20 +date: 2024-05-21 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 726214f3a22d9d..2b62c2859b1452 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index ba5a9aead9745e..0cb73dcfaeb321 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 9f8cd210a3f243..927fdcae7afeea 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index a9fb8508b490cb..75b05f30566376 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index abc9434abf530a..4e049490d3d938 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 1fbdf0062a3492..c91236fe7b9b8f 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 1717c1602ba582..cc6a500a56b3ae 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-05-20 +date: 2024-05-21 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 36a5c3cfd0e650..b7273bca494cd2 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-05-20 +date: 2024-05-21 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 0aa15b1d04d414..7abe2fd53d0758 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-05-20 +date: 2024-05-21 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 7f6ae788d2720f..c3de62be7c320c 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-05-20 +date: 2024-05-21 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 c3ef45609b022d..5a988ea6661ed6 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-05-20 +date: 2024-05-21 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 df48c59479d8fa..f060c20adb20bb 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-05-20 +date: 2024-05-21 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 1ab460056ad877..532f0e20f76963 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 2f482f3c45d9f2..dfd2ecd68b4419 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 99e3028a1874b7..d359fd60c53e48 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 485ce19c77d8a2..46b78f0c4f838f 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 9e95c7fceecda8..e73cb8b287074e 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index f45396785a08f8..cdd2746e03c617 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 485723b32754f0..232cc7b1d3cdf0 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-05-20 +date: 2024-05-21 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 2111af1994ea79..371e312891bdb9 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-05-20 +date: 2024-05-21 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 6f79c80cff47a0..478194f3f1f7e9 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-05-20 +date: 2024-05-21 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 07755a84b02c0c..b2a97ce8801cfe 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 9a9f33206fdf9b..bfd310808ee888 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index beaea76c533b78..ac0020ea37f391 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 2069056f50652b..4d71e4a2eaa282 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 61b72c0aa45de4..038ac8cc6367d1 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-05-20 +date: 2024-05-21 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 b2ca9d714ef6b8..cf5c453e5c2166 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-05-20 +date: 2024-05-21 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 cd5e7719b1521a..4ba355557e23d7 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-05-20 +date: 2024-05-21 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 e7e8a84d0999e8..c5cb9e55f779d6 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 2bf4842d3aa9cb..94f5ac9c7865d9 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index ab929eaca72a72..3314d7514b861b 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 94e78057415cbc..5cc3915368a9ed 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 8bbd911ed45034..3817e4cccfc32c 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index b11b636b3daa22..b44a4847244a70 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index d39fa52f9d2c2c..c93a7ab0e770ca 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index e7363949fffe83..8f84a2e4e4325c 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 2f487c61878673..7154515c29d769 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index d5a79adc57e037..190170d4f6e1c3 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index caeef587b92dd0..42161e9e4b01cb 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index f3994662ff5df6..1bd8c3d83ffc68 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 5a6ccd7f4b458a..22df04dd5598f9 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48219 | 241 | 36798 | 1860 | +| 48314 | 241 | 36882 | 1862 | ## Plugin Directory @@ -92,13 +92,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'shape' function and renderer to expressions | 148 | 0 | 146 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 6 | 0 | 6 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 177 | 0 | 166 | 13 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2217 | 17 | 1756 | 5 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2233 | 17 | 1763 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 235 | 0 | 99 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 292 | 5 | 253 | 3 | | | [@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. | 84 | 0 | 84 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 0 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1305 | 5 | 1184 | 66 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1308 | 5 | 1187 | 66 | | 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) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -453,7 +453,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 16 | 0 | 16 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 19 | 0 | 17 | 6 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 26 | 0 | 26 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 51 | 0 | 51 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 14 | 0 | 9 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 80 | 0 | 80 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 1 | 0 | 0 | 0 | @@ -482,8 +482,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 33 | 0 | 24 | 1 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 174 | 0 | 147 | 9 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 232 | 0 | 217 | 2 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 165 | 0 | 138 | 9 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 292 | 0 | 275 | 2 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 37 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 8c268e1f95f1b1..88036a6548bfc3 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index c3fbeb48c1cb44..556033da8b3620 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-05-20 +date: 2024-05-21 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 24562df3c52b62..7ee63373323424 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 815446290093b7..b3454b615130dc 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 8a9b064ae4b3ef..fddaa2e2df1124 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-05-20 +date: 2024-05-21 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 6640e4af8b91d9..5d0c5dbb77de4b 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 7a0c154687213c..d9946210284249 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-05-20 +date: 2024-05-21 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 08ce12e279590e..d375c564acf87d 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-05-20 +date: 2024-05-21 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 fa58345d738cae..2a50f910b307ee 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-05-20 +date: 2024-05-21 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 2bec6748e53cd1..280beb6a3684ee 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-05-20 +date: 2024-05-21 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 5daf9853f828f8..428dd011352cfb 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-05-20 +date: 2024-05-21 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 e228ca41219025..dcc329e1f6e1f6 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-05-20 +date: 2024-05-21 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 e97860955ca84c..e111fe20d6b153 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-05-20 +date: 2024-05-21 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 0d574769a21cd5..4c3790c5b7fddb 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-05-20 +date: 2024-05-21 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 16bc7de0b56884..fbe27ef01562fc 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-05-20 +date: 2024-05-21 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 2e07d5a49f159b..e70907ff838045 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-05-20 +date: 2024-05-21 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 ae5c74157c1ba3..c5dcd9c1748305 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 9a37ce5bc337bc..8e87f75d364cfa 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 4613c7395bbdcd..204fe92313f048 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 018d2605b2f76a..67ebde0f93bf88 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 493597afeb4da4..859e5171a10048 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 4f10cc05299177..ca2477fb78910e 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -390,7 +390,7 @@ "label": "data", "description": [], "signature": [ - "({ id: string; type: \"eql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"saved_query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"threshold\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; saved_id?: string | undefined; } | { id: string; type: \"threat_match\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { value: string; type: \"mapping\"; field: string; }[]; }[]; threat_index: string[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { id: string; type: \"machine_learning\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { id: string; type: \"new_terms\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"esql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ id: string; type: \"eql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"saved_query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"threshold\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; saved_id?: string | undefined; } | { id: string; type: \"threat_match\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { value: string; type: \"mapping\"; field: string; }[]; }[]; threat_index: string[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { id: string; type: \"machine_learning\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { id: string; type: \"new_terms\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"esql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; interval: string; description: string; version: number; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; references: string[]; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; rule_source?: { type: \"external\"; is_customized: boolean; } | { type: \"internal\"; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1964,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3054,7 +3054,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3230,7 +3230,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3296,7 +3296,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 27007122fc6d88..31eab62a42a349 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-05-20 +date: 2024-05-21 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 811a8cda4699fe..e1ea13382cce55 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-05-20 +date: 2024-05-21 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 cc23b3a3c1587e..3a56fe5e3bbd5a 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-05-20 +date: 2024-05-21 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 c0af522c9791d2..d4a2a3eaf5ba63 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-05-20 +date: 2024-05-21 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 d81adb6537e73d..ce3a1b00c80a7c 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-05-20 +date: 2024-05-21 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 61c74b672b4e70..1abafe552297cc 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-05-20 +date: 2024-05-21 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 ea83468fcd1d3d..7c117ab6352d61 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-05-20 +date: 2024-05-21 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 8e94973d5c3492..fd8e32ab77873c 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 7ef4a611abcf81..51047a9b564cd6 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 0ea1d3172dd3be..d40fef8cc27354 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-05-20 +date: 2024-05-21 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 087542719d1e47..9e7e876cc85707 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-05-20 +date: 2024-05-21 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 1a2bbb0524a15f..6d1c4180e37f0a 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-05-20 +date: 2024-05-21 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 33fc2ffd33a4e3..99a070937692f8 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-05-20 +date: 2024-05-21 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 6e2fc9a19eaf83..3bb0507e70c97b 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-05-20 +date: 2024-05-21 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 79de411a6e575f..2d7d1f9fdce146 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-05-20 +date: 2024-05-21 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 95d3eec19eba47..f863972a1b42e1 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-05-20 +date: 2024-05-21 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 ec85be98e62b7a..2e8137d5b98911 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-05-20 +date: 2024-05-21 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 6531727d0d0fcc..3b1f8fdc0ae216 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-05-20 +date: 2024-05-21 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 e5df0709fea7de..eba0fe18db9538 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-20 +date: 2024-05-21 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 8a58fa683984b5..a5bf8423a93b7d 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-05-20 +date: 2024-05-21 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 207e867788d386..5d8f6725e3f5b7 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-05-20 +date: 2024-05-21 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 77864ff7ffdb3c..1c3d61e250f9b4 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-05-20 +date: 2024-05-21 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 ecceb395dcf5d1..309a41daf411f5 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-05-20 +date: 2024-05-21 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 b561d2da43a8e8..2c75a71b484ed3 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-05-20 +date: 2024-05-21 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 7522b26b6f3f51..a03712cd9b8cba 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index c1f174a432bb27..9a8f742ae1ae46 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 074ba92429cbee..415082b4e6a799 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-05-20 +date: 2024-05-21 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 0ef774e7bf6be9..57a41134bbace0 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-05-20 +date: 2024-05-21 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 b79b3c80e18e62..57cf8a9d6fa18b 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index db3a5756af1391..c52757991569a9 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index d7b26a682cb271..96a6a1abb46f71 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-05-20 +date: 2024-05-21 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 e741e98b12d204..0f578800d0ad49 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-05-20 +date: 2024-05-21 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 5bca97e8999539..ea51fac23bd2a1 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-05-20 +date: 2024-05-21 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 193e96d59bb23e..69a2bb47777010 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-05-20 +date: 2024-05-21 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 7d5ef7ea92dff4..d57a7abd67e3b0 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-05-20 +date: 2024-05-21 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 dab12777092443..5497549bf44dd3 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-05-20 +date: 2024-05-21 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 496bb0951f15cf..e62191b0f3eb18 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-05-20 +date: 2024-05-21 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 9bb57b81870b07..3a51a7c629110e 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-05-20 +date: 2024-05-21 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 0607b3fbe497e6..a7573aa7ed2f81 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-05-20 +date: 2024-05-21 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 0ff4a1b9f893a0..3532eeea84f894 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-05-20 +date: 2024-05-21 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 ebc6df00a27985..a99ce6f4929764 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-05-20 +date: 2024-05-21 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 be3ee2bb95a9b4..16894149195517 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-05-20 +date: 2024-05-21 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 b120e745b9875a..960c21dc6e411c 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 4c015585d1a70f..e60761d38f9732 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-05-20 +date: 2024-05-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From df74eb609ce66f5a3da3362ec0acdf410789e480 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Tue, 21 May 2024 11:17:06 +0200 Subject: [PATCH 44/97] [Infra] Use asset details flyout overview and metadata for containers (#183767) Closes #183727 ## Summary This PR adds asset details flyout to the inventory containers view. The feature flag `observability:enableInfrastructureContainerAssetView` should be enabled to see it. To handle the asset type switching in the asset details flyout this PR adds asset type to the `assetDetailsFlyout` URL param Before: ![image](https://github.com/elastic/kibana/assets/14139027/3b4fe8a1-d874-46a4-801f-2e0f91880034) After: - Overview ![image](https://github.com/elastic/kibana/assets/14139027/df54cc5c-f80f-40c8-9189-9d390e2c4eff) - Metadata ![image](https://github.com/elastic/kibana/assets/14139027/cd4a5ba9-33fc-428a-bb0f-571d820260fc) ## Testing - Enable `observability:enableInfrastructureContainerAssetView` in infra settings - Go to containers view, click on a container, and check the content https://github.com/elastic/kibana/assets/14139027/5ba578e6-6cdd-4561-a1f6-27ff4962ef6f --- .../asset_details_tabs.tsx | 21 ++++++++++++++++ .../components/asset_details/constants.ts | 8 ++++++- .../asset_details/hooks/use_page_header.tsx | 4 ++-- .../public/components/asset_details/types.ts | 5 ++++ .../public/components/asset_details/utils.ts | 14 ++++++++++- .../components/nodes_overview.tsx | 20 ++++++++++++---- .../waffle/asset_details_flyout.tsx | 24 ++++++------------- .../inventory_view/components/waffle/node.tsx | 12 +++++++--- .../use_asset_details_flyout_url_state.ts | 2 ++ 9 files changed, 81 insertions(+), 29 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx index 1383e1c49915ed..c7f4b9f497a525 100644 --- a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx +++ b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx @@ -90,6 +90,13 @@ const dashboardsTab: Tab = { ), }; +const linkToApmTab: Tab = { + id: ContentTabIds.LINK_TO_APM, + name: i18n.translate('xpack.infra.assetDetails.tabs.linkToApm', { + defaultMessage: 'APM', + }), +}; + export const hostDetailsTabs: Tab[] = [ overviewTab, metadataTab, @@ -101,8 +108,11 @@ export const hostDetailsTabs: Tab[] = [ osqueryTab, dashboardsTab, ]; +export const hostDetailsFlyoutTabs: Tab[] = [...hostDetailsTabs, linkToApmTab]; + // Profiling and Logs tab would be added in next iteration export const containerDetailsTabs: Tab[] = [overviewTab, metadataTab]; +export const containerDetailsFlyoutTabs: Tab[] = [overviewTab, metadataTab, linkToApmTab]; export const getAssetDetailsTabs = (type: string): Tab[] => { switch (type) { @@ -114,3 +124,14 @@ export const getAssetDetailsTabs = (type: string): Tab[] => { return []; } }; + +export const getAssetDetailsFlyoutTabs = (type: string): Tab[] => { + switch (type) { + case 'host': + return hostDetailsFlyoutTabs; + case 'container': + return containerDetailsFlyoutTabs; + default: + return []; + } +}; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts index 81a82ecb308754..49a174ba22c1c7 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts @@ -5,12 +5,18 @@ * 2.0. */ -import { INTEGRATION_NAME } from './types'; +import { INTEGRATION_NAME, ASSET_DETAILS_ASSET_TYPE } from './types'; export const ASSET_DETAILS_FLYOUT_COMPONENT_NAME = 'infraAssetDetailsFlyout'; export const ASSET_DETAILS_PAGE_COMPONENT_NAME = 'infraAssetDetailsPage'; export const APM_HOST_FILTER_FIELD = 'host.hostname'; +export const APM_CONTAINER_FILTER_FIELD = 'container.id'; + +export const APM_FILTER_FIELD_PER_ASSET_TYPE = { + [ASSET_DETAILS_ASSET_TYPE.container]: APM_CONTAINER_FILTER_FIELD, + [ASSET_DETAILS_ASSET_TYPE.host]: APM_HOST_FILTER_FIELD, +}; export const ASSET_DETAILS_URL_STATE_KEY = 'assetDetails'; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx index 29c048c540a048..be98902ad9c57e 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_page_header.tsx @@ -22,11 +22,11 @@ import { usePluginConfig } from '../../../containers/plugin_config_context'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { useProfilingIntegrationSetting } from '../../../hooks/use_profiling_integration_setting'; import { CreateAlertRuleButton } from '../../shared/alerts/links/create_alert_rule_button'; -import { APM_HOST_FILTER_FIELD } from '../constants'; import { LinkToNodeDetails } from '../links'; import { ContentTabIds, type LinkOptions, type RouteState, type Tab, type TabIds } from '../types'; import { useAssetDetailsRenderPropsContext } from './use_asset_details_render_props'; import { useTabSwitcherContext } from './use_tab_switcher'; +import { getApmField } from '../utils'; type TabItem = NonNullable['tabs']>[number]; @@ -157,7 +157,7 @@ const useTabs = (tabs: Tab[]) => { app: 'apm', hash: 'traces', search: { - kuery: `${APM_HOST_FILTER_FIELD}:"${asset.name}"`, + kuery: `${getApmField(asset.type)}:"${asset.id}"`, }, }); diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts index e51a7b53bda7d1..35eea0faab44b4 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts @@ -102,3 +102,8 @@ export enum INTEGRATION_NAME { kubernetesContainer = 'kubernetesContainer', docker = 'docker', } + +export enum ASSET_DETAILS_ASSET_TYPE { + container = 'container', + host = 'host', +} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts index 1838e613e44023..6356b42fdf0bb6 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/utils.ts @@ -5,8 +5,9 @@ * 2.0. */ +import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import type { InfraMetadata } from '../../../common/http_api'; -import { INTEGRATIONS } from './constants'; +import { INTEGRATIONS, APM_FILTER_FIELD_PER_ASSET_TYPE } from './constants'; export const toTimestampRange = ({ from, to }: { from: string; to: string }) => { const fromTs = new Date(from).getTime(); @@ -34,3 +35,14 @@ export const getIntegrationsAvailable = (metadata?: InfraMetadata | null) => { .filter(([_, fields]) => metadata?.features?.some((f) => fields.includes(f.name))) .map(([name]) => name); }; + +export const getApmField = (assetType: InventoryItemType): string => { + switch (assetType) { + case 'host': + return APM_FILTER_FIELD_PER_ASSET_TYPE.host; + case 'container': + return APM_FILTER_FIELD_PER_ASSET_TYPE.container; + default: + return ''; + } +}; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx index 8830324f1ce45b..62e2d1de5c9359 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { usePerformanceContext } from '@kbn/ebt-tools'; -import React, { useCallback } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { useCurrentEuiBreakpoint } from '@elastic/eui'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; @@ -63,11 +63,20 @@ export const NodesOverview = ({ isAutoReloading, }: Props) => { const currentBreakpoint = useCurrentEuiBreakpoint(); - const [{ detailsItemId }, setFlyoutUrlState] = useAssetDetailsFlyoutState(); + const [{ detailsItemId, assetType }, setFlyoutUrlState] = useAssetDetailsFlyoutState(); const { onPageReady } = usePerformanceContext(); + const nodeName = useMemo( + () => nodes.find((node) => node.path[0].value === detailsItemId)?.name, + [detailsItemId, nodes] + ); + const closeFlyout = useCallback( - () => setFlyoutUrlState({ detailsItemId: null }), + () => + setFlyoutUrlState({ + detailsItemId: null, + assetType: null, + }), [setFlyoutUrlState] ); @@ -149,9 +158,10 @@ export const NodesOverview = ({ bottomMargin={bottomMargin} staticHeight={isStatic} /> - {nodeType === 'host' && detailsItemId && ( + {nodeType === assetType && detailsItemId && ( void; currentTime: number; @@ -24,20 +23,11 @@ interface Props { refreshInterval?: number; } -const flyoutTabs = [ - ...hostDetailsTabs, - { - id: ContentTabIds.LINK_TO_APM, - name: i18n.translate('xpack.infra.assetDetails.tabs.linkToApm', { - defaultMessage: 'APM', - }), - }, -]; - const ONE_HOUR = 60 * 60 * 1000; export const AssetDetailsFlyout = ({ assetName, + assetId, assetType, closeFlyout, currentTime, @@ -62,7 +52,7 @@ export const AssetDetailsFlyout = ({ return source ? ( { - if (nodeType === 'host') { - setFlyoutUrlState({ detailsItemId: node.name }); + if (nodeType === 'host' || showContainerAssetDetailPage) { + setFlyoutUrlState({ detailsItemId: node.id, assetType: nodeType }); } else { togglePopover(); } @@ -71,7 +77,7 @@ export const Node = ({ color={color} nodeName={node.name} value={value} - showBorder={detailsItemId === node.name || isPopoverOpen} + showBorder={detailsItemId === node.id || isPopoverOpen} /> ); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_asset_details_flyout_url_state.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_asset_details_flyout_url_state.ts index 7847cfc0da268e..10279312ed882c 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_asset_details_flyout_url_state.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_asset_details_flyout_url_state.ts @@ -13,6 +13,7 @@ import { useUrlState } from '../../../../utils/use_url_state'; export const GET_DEFAULT_PROPERTIES: AssetDetailsFlyoutProperties = { detailsItemId: null, + assetType: null, }; const ASSET_DETAILS_FLYOUT_URL_STATE_KEY = 'assetDetailsFlyout'; @@ -35,6 +36,7 @@ export const useAssetDetailsFlyoutState = (): [ const AssetDetailsFlyoutStateRT = rt.type({ detailsItemId: rt.union([rt.string, rt.null]), + assetType: rt.union([rt.string, rt.null]), }); export type AssetDetailsFlyoutState = rt.TypeOf; From d43c8f94f3513dbda20fcb26e51e2c543dad36c1 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 21 May 2024 11:32:57 +0200 Subject: [PATCH 45/97] [ML] AIOps: Adds cardinality check to Log Rate Analysis (#181129) ## Summary Part of #181111. This filters field/value items from the results if the field has a cardinality of just 1 since it wouldn't be useful as a result. Before (you can easily spot fields with cardinality of 1 because the mini histogram in the table is just one color which means the value is present in all logs): ![image](https://github.com/elastic/kibana/assets/230104/2904c026-5a69-43b7-b80f-87923368b506) After: ![image](https://github.com/elastic/kibana/assets/230104/7a9bffae-9991-4584-91f1-cff9fdc1eaf1) ### 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 - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../fetch_significant_term_p_values.ts | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_significant_term_p_values.ts b/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_significant_term_p_values.ts index 9cd7bd3a3acb80..98dbd11398174a 100644 --- a/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_significant_term_p_values.ts +++ b/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_significant_term_p_values.ts @@ -56,8 +56,18 @@ export const getSignificantTermRequest = ( ]; } - const pValueAgg: Record<'change_point_p_value', estypes.AggregationsAggregationContainer> = { - change_point_p_value: { + const pValueAgg: Record< + 'sig_term_p_value' | 'distinct_count', + estypes.AggregationsAggregationContainer + > = { + // Used to identify fields with only one distinct value which we'll ignore in the analysis. + distinct_count: { + cardinality: { + field: fieldName, + }, + }, + // Used to calculate the p-value for terms of the field. + sig_term_p_value: { significant_terms: { field: fieldName, background_filter: { @@ -158,13 +168,26 @@ export const fetchSignificantTermPValues = async ( } const overallResult = ( - randomSamplerWrapper.unwrap(resp.aggregations) as Record<'change_point_p_value', Aggs> - ).change_point_p_value; + randomSamplerWrapper.unwrap(resp.aggregations) as Record<'sig_term_p_value', Aggs> + ).sig_term_p_value; + + const distinctCount = ( + randomSamplerWrapper.unwrap(resp.aggregations) as Record< + 'distinct_count', + estypes.AggregationsCardinalityAggregate + > + ).distinct_count.value; for (const bucket of overallResult.buckets) { const pValue = Math.exp(-bucket.score); - if (typeof pValue === 'number' && pValue < LOG_RATE_ANALYSIS_SETTINGS.P_VALUE_THRESHOLD) { + if ( + typeof pValue === 'number' && + // Skip items where the p-value is not significant. + pValue < LOG_RATE_ANALYSIS_SETTINGS.P_VALUE_THRESHOLD && + // Skip items where the field has only one distinct value. + distinctCount > 1 + ) { result.push({ key: `${fieldName}:${String(bucket.key)}`, type: SIGNIFICANT_ITEM_TYPE.KEYWORD, From 4c9d65b7671566065a33140566dc279e79604dc6 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 21 May 2024 11:34:31 +0200 Subject: [PATCH 46/97] [ML] AIOps Log Rate Analysis: Merge fetch queue for keyword and text field candidates. (#183649) ## Summary Part of #181111. So far we identified significant `text` field candidates before `keyword` field candidates. There were 2 problems with this: 1) The loading behaviour for `text` fields was not considered in the progress bar. 2) Analysing a `text` field can be quite slow we weren't taking advantage of the same queue we used to fetch `keyword` fields. If it was taking quite a while to analysis the `text` fields, it would appear the progress bar was "stuck". And we had to wait to finish those slow queries before we started fetching p-values for `keyword` fields. This PR improves the behaviour by adding `text` field fetching to the same queue that fetches `keyword` fields. This means while a maybe slower `text` field is analysed, we can continue to fetch `keyword` based fields in parallel given the max concurrency. It's a bit tricky to test because with the local datasets the analysis might be so fast you won't notice a difference. So for testing you could do the following: In the file `significant_items_handler.ts` at the top add: ``` const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); ``` And further down around line `110` add the following delay: ``` const pValuesQueue = queue(async function (payload: Candidate) { await delay(Math.random() * 10000); if (isFieldCandidate(payload)) { ... ``` This will randomly delay the next call for the text/keyword field so you should see the progress bar moving. The difference to before would be that the progress bar would not move while it analyses the text fields. ### 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 - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../analysis_handlers/index_info_handler.ts | 4 +- .../significant_items_handler.ts | 134 +++++++++++------- 2 files changed, 85 insertions(+), 53 deletions(-) diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/index_info_handler.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/index_info_handler.ts index 730b11cdd28a54..038fc0588f6a2b 100644 --- a/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/index_info_handler.ts +++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/index_info_handler.ts @@ -36,6 +36,7 @@ export const indexInfoHandlerFactory = let fieldCandidatesCount = fieldCandidates.length; const textFieldCandidates: string[] = []; + let textFieldCandidatesCount = textFieldCandidates.length; let zeroDocsFallback = false; @@ -68,6 +69,7 @@ export const indexInfoHandlerFactory = fieldCandidates.push(...indexInfo.fieldCandidates); fieldCandidatesCount = fieldCandidates.length; textFieldCandidates.push(...indexInfo.textFieldCandidates); + textFieldCandidatesCount = textFieldCandidates.length; zeroDocsFallback = indexInfo.zeroDocsFallback; } catch (e) { if (!isRequestAbortedError(e)) { @@ -92,7 +94,7 @@ export const indexInfoHandlerFactory = defaultMessage: 'Identified {fieldCandidatesCount, plural, one {# field candidate} other {# field candidates}}.', values: { - fieldCandidatesCount, + fieldCandidatesCount: fieldCandidatesCount + textFieldCandidatesCount, }, } ), diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/significant_items_handler.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/significant_items_handler.ts index aa2aa1944e64a5..6a3a83352ca76e 100644 --- a/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/significant_items_handler.ts +++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis/analysis_handlers/significant_items_handler.ts @@ -18,9 +18,9 @@ import type { AiopsLogRateAnalysisApiVersion as ApiVersion, } from '@kbn/aiops-log-rate-analysis/api/schema'; import { isRequestAbortedError } from '@kbn/aiops-common/is_request_aborted_error'; - import { fetchSignificantCategories } from '@kbn/aiops-log-rate-analysis/queries/fetch_significant_categories'; import { fetchSignificantTermPValues } from '@kbn/aiops-log-rate-analysis/queries/fetch_significant_term_p_values'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { LOADED_FIELD_CANDIDATES, @@ -29,6 +29,20 @@ import { } from '../response_stream_utils/constants'; import type { ResponseStreamFetchOptions } from '../response_stream_factory'; +interface FieldCandidate { + fieldCandidate: string; +} +const isFieldCandidate = (d: unknown): d is FieldCandidate => + isPopulatedObject(d, ['fieldCandidate']); + +interface TextFieldCandidate { + textFieldCandidate: string; +} +const isTextFieldCandidate = (d: unknown): d is FieldCandidate => + isPopulatedObject(d, ['textFieldCandidate']); + +type Candidate = FieldCandidate | TextFieldCandidate; + export const significantItemsHandlerFactory = ({ abortSignal, @@ -47,6 +61,7 @@ export const significantItemsHandlerFactory = textFieldCandidates: string[]; }) => { let fieldCandidatesCount = fieldCandidates.length; + const textFieldCandidatesCount = textFieldCandidates.length; // This will store the combined count of detected significant log patterns and keywords let fieldValuePairsCount = 0; @@ -59,25 +74,6 @@ export const significantItemsHandlerFactory = ) ?? []) ); - // Get significant categories of text fields - if (textFieldCandidates.length > 0) { - significantCategories.push( - ...(await fetchSignificantCategories( - client, - requestBody, - textFieldCandidates, - logger, - stateHandler.sampleProbability(), - responseStream.pushError, - abortSignal - )) - ); - - if (significantCategories.length > 0) { - responseStream.push(addSignificantItemsAction(significantCategories)); - } - } - const significantTerms: SignificantItem[] = []; significantTerms.push( @@ -105,39 +101,67 @@ export const significantItemsHandlerFactory = logDebugMessage('Fetch p-values.'); - const pValuesQueue = queue(async function (fieldCandidate: string) { - stateHandler.loaded((1 / fieldCandidatesCount) * loadingStepSizePValues, false); + const loadingStep = + (1 / (fieldCandidatesCount + textFieldCandidatesCount)) * loadingStepSizePValues; + + const pValuesQueue = queue(async function (payload: Candidate) { + if (isFieldCandidate(payload)) { + const { fieldCandidate } = payload; + let pValues: Awaited>; + + try { + pValues = await fetchSignificantTermPValues( + client, + requestBody, + [fieldCandidate], + logger, + stateHandler.sampleProbability(), + responseStream.pushError, + abortSignal + ); + } catch (e) { + if (!isRequestAbortedError(e)) { + logger.error( + `Failed to fetch p-values for '${fieldCandidate}', got: \n${e.toString()}` + ); + responseStream.pushError(`Failed to fetch p-values for '${fieldCandidate}'.`); + } + return; + } + + remainingFieldCandidates = remainingFieldCandidates.filter((d) => d !== fieldCandidate); - let pValues: Awaited>; + if (pValues.length > 0) { + pValues.forEach((d) => { + fieldsToSample.add(d.fieldName); + }); + significantTerms.push(...pValues); + + responseStream.push(addSignificantItemsAction(pValues)); + + fieldValuePairsCount += pValues.length; + } + } else if (isTextFieldCandidate(payload)) { + const { textFieldCandidate } = payload; - try { - pValues = await fetchSignificantTermPValues( + const significantCategoriesForField = await fetchSignificantCategories( client, requestBody, - [fieldCandidate], + [textFieldCandidate], logger, stateHandler.sampleProbability(), responseStream.pushError, abortSignal ); - } catch (e) { - if (!isRequestAbortedError(e)) { - logger.error(`Failed to fetch p-values for '${fieldCandidate}', got: \n${e.toString()}`); - responseStream.pushError(`Failed to fetch p-values for '${fieldCandidate}'.`); + + if (significantCategoriesForField.length > 0) { + significantCategories.push(...significantCategoriesForField); + responseStream.push(addSignificantItemsAction(significantCategoriesForField)); + fieldValuePairsCount += significantCategoriesForField.length; } - return; } - remainingFieldCandidates = remainingFieldCandidates.filter((d) => d !== fieldCandidate); - - if (pValues.length > 0) { - pValues.forEach((d) => { - fieldsToSample.add(d.fieldName); - }); - significantTerms.push(...pValues); - - responseStream.push(addSignificantItemsAction(pValues)); - } + stateHandler.loaded(loadingStep, false); responseStream.push( updateLoadingStateAction({ @@ -158,18 +182,24 @@ export const significantItemsHandlerFactory = ); }, MAX_CONCURRENT_QUERIES); - pValuesQueue.push(fieldCandidates, (err) => { - if (err) { - logger.error(`Failed to fetch p-values.', got: \n${err.toString()}`); - responseStream.pushError(`Failed to fetch p-values.`); - pValuesQueue.kill(); - responseStream.end(); - } else if (stateHandler.shouldStop()) { - logDebugMessage('shouldStop fetching p-values.'); - pValuesQueue.kill(); - responseStream.end(); + pValuesQueue.push( + [ + ...textFieldCandidates.map((d) => ({ textFieldCandidate: d })), + ...fieldCandidates.map((d) => ({ fieldCandidate: d })), + ], + (err) => { + if (err) { + logger.error(`Failed to fetch p-values.', got: \n${err.toString()}`); + responseStream.pushError(`Failed to fetch p-values.`); + pValuesQueue.kill(); + responseStream.end(); + } else if (stateHandler.shouldStop()) { + logDebugMessage('shouldStop fetching p-values.'); + pValuesQueue.kill(); + responseStream.end(); + } } - }); + ); await pValuesQueue.drain(); fieldValuePairsCount = significantCategories.length + significantTerms.length; From 63441fd22619ed6fd5cc71e9a8b094672d2b6d04 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 21 May 2024 11:35:16 +0200 Subject: [PATCH 47/97] [ML] AIOps Log Rate Analysis: Fix date picker refresh button. (#183768) ## Summary Part of #181111. The refresh button wasn't working as expected. It would refetch the date histogram, but if you had a time set like `Last 15 minutes`, the time range on the page wasn't updated. This PR adds a fix to trigger a refresh of active bounds. It fixes a problem with the deviation brush not properly updating too. Without the fix, the deviation brush would not move when the time range changes. [aiops-lra-refresh-fix-0001.webm](https://github.com/elastic/kibana/assets/230104/70d51b1c-e831-4971-b385-3c455632b8eb) ### 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 - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../src/dual_brush/dual_brush.tsx | 17 ++++++++++++----- .../log_rate_analysis_content.tsx | 1 + .../log_rate_analysis_page.tsx | 2 +- x-pack/plugins/aiops/public/hooks/use_data.ts | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx b/x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx index fe5eceb9041f9f..43d498aa98905f 100644 --- a/x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx +++ b/x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx @@ -233,10 +233,14 @@ export const DualBrush: FC = (props) => { ]); } - brushes.current[0].start = snappedWindowParameters.baselineMin; - brushes.current[0].end = snappedWindowParameters.baselineMax; - brushes.current[1].start = snappedWindowParameters.deviationMin; - brushes.current[1].end = snappedWindowParameters.deviationMax; + if (id === 'baseline') { + brushes.current[0].start = snappedWindowParameters.baselineMin; + brushes.current[0].end = snappedWindowParameters.baselineMax; + } + if (id === 'deviation') { + brushes.current[1].start = snappedWindowParameters.deviationMin; + brushes.current[1].end = snappedWindowParameters.deviationMax; + } if (onChange) { onChange(snappedWindowParameters, newBrushPx); @@ -263,7 +267,10 @@ export const DualBrush: FC = (props) => { return 'aiopsBrush' + b.id.charAt(0).toUpperCase() + b.id.slice(1); }) .each((brushObject: DualBrush, i, n) => { - const x = d3.scaleLinear().domain([min, max]).rangeRound([0, widthRef.current]); + const x = d3 + .scaleLinear() + .domain([minRef.current, maxRef.current]) + .rangeRound([0, widthRef.current]); // Ensure brush style is applied brushObject.brush.extent([ [0, BRUSH_MARGIN], diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index 59373ae4b9253e..16fc210d2efc2e 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -63,6 +63,7 @@ export function getDocumentCountStatsSplitLabel( } export interface LogRateAnalysisContentProps { + /** Optional time range override */ timeRange?: { min: Moment; max: Moment }; /** Elasticsearch query to pass to analysis endpoint */ esSearchQuery?: estypes.QueryDslQueryContainer; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx index c8d69b54e70a6e..f6a40f2540f65e 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx @@ -99,7 +99,7 @@ export const LogRateAnalysisPage: FC = ({ stickyHistogram }) => { ); useEffect( - // TODO: Consolidate this hook/function with with Data visualizer's + // TODO: Consolidate this hook/function with the one in `x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx` function clearFiltersOnLeave() { return () => { // We want to clear all filters that have not been pinned globally diff --git a/x-pack/plugins/aiops/public/hooks/use_data.ts b/x-pack/plugins/aiops/public/hooks/use_data.ts index 9986a4d65dd708..26941cf2840fa4 100644 --- a/x-pack/plugins/aiops/public/hooks/use_data.ts +++ b/x-pack/plugins/aiops/public/hooks/use_data.ts @@ -117,8 +117,8 @@ export const useData = ( time: timefilter.getTime(), refreshInterval: timefilter.getRefreshInterval(), }); - setLastRefresh(Date.now()); } + setLastRefresh(Date.now()); }); // This listens just for an initial update of the timefilter to be switched on. From 163a04ecd454cdcbfd58989c7ca7e070a08fda54 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Tue, 21 May 2024 04:54:54 -0500 Subject: [PATCH 48/97] [es query] Make filters work with DataViewLazy (#183845) ## Summary The es query filter code specifies DataViewBase arguments but its really only using the id field. The DataViewBase field attribute isn't compatible with DataViewLazy which doesn't have a field list. If we use `Pick` then we can use DataView, DataViewLazy, or DataViewBase with these functions. Part of https://github.com/elastic/kibana/pull/183694 --- packages/kbn-es-query/index.ts | 1 + packages/kbn-es-query/src/es_query/index.ts | 1 + packages/kbn-es-query/src/es_query/types.ts | 8 +++++--- .../src/filters/build_filters/build_filters.ts | 4 ++-- .../src/filters/build_filters/exists_filter.ts | 4 ++-- .../src/filters/build_filters/phrase_filter.ts | 4 ++-- .../src/filters/build_filters/phrases_filter.ts | 4 ++-- .../src/filters/build_filters/range_filter.ts | 6 +++--- 8 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/kbn-es-query/index.ts b/packages/kbn-es-query/index.ts index 3793f0efb8855c..1bac3ff24ec465 100644 --- a/packages/kbn-es-query/index.ts +++ b/packages/kbn-es-query/index.ts @@ -9,6 +9,7 @@ export type { BoolQuery, DataViewBase, + DataViewBaseNoFields, DataViewFieldBase, EsQueryConfig, EsQueryFiltersConfig, diff --git a/packages/kbn-es-query/src/es_query/index.ts b/packages/kbn-es-query/src/es_query/index.ts index bb84ddbc16f974..ba11fd2fc35817 100644 --- a/packages/kbn-es-query/src/es_query/index.ts +++ b/packages/kbn-es-query/src/es_query/index.ts @@ -24,6 +24,7 @@ export type { IFieldSubType, BoolQuery, DataViewBase, + DataViewBaseNoFields, DataViewFieldBase, IFieldSubTypeMulti, IFieldSubTypeNested, diff --git a/packages/kbn-es-query/src/es_query/types.ts b/packages/kbn-es-query/src/es_query/types.ts index 89c22521a6409f..1a756f55cf145c 100644 --- a/packages/kbn-es-query/src/es_query/types.ts +++ b/packages/kbn-es-query/src/es_query/types.ts @@ -64,12 +64,14 @@ export type DataViewFieldBase = { * A base interface for an index pattern * @public */ -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -export type DataViewBase = { +export interface DataViewBase extends DataViewBaseNoFields { fields: DataViewFieldBase[]; +} + +export interface DataViewBaseNoFields { id?: string; title: string; -}; +} export interface BoolQuery { must: estypes.QueryDslQueryContainer[]; diff --git a/packages/kbn-es-query/src/filters/build_filters/build_filters.ts b/packages/kbn-es-query/src/filters/build_filters/build_filters.ts index 368c9e779f8e39..7719e922374cae 100644 --- a/packages/kbn-es-query/src/filters/build_filters/build_filters.ts +++ b/packages/kbn-es-query/src/filters/build_filters/build_filters.ts @@ -14,7 +14,7 @@ import { buildPhrasesFilter } from './phrases_filter'; import { buildRangeFilter, RangeFilterParams } from './range_filter'; import { buildExistsFilter } from './exists_filter'; -import type { DataViewFieldBase, DataViewBase } from '../../es_query'; +import type { DataViewFieldBase, DataViewBase, DataViewBaseNoFields } from '../../es_query'; import { FilterStateStore } from './types'; /** @@ -52,7 +52,7 @@ export function buildFilter( } function buildBaseFilter( - indexPattern: DataViewBase, + indexPattern: DataViewBaseNoFields, field: DataViewFieldBase, type: FILTERS, params: Serializable diff --git a/packages/kbn-es-query/src/filters/build_filters/exists_filter.ts b/packages/kbn-es-query/src/filters/build_filters/exists_filter.ts index 23210093fc8a85..bb28f7f786cd1f 100644 --- a/packages/kbn-es-query/src/filters/build_filters/exists_filter.ts +++ b/packages/kbn-es-query/src/filters/build_filters/exists_filter.ts @@ -7,7 +7,7 @@ */ import { has } from 'lodash'; -import type { DataViewFieldBase, DataViewBase } from '../../es_query'; +import type { DataViewFieldBase, DataViewBaseNoFields } from '../../es_query'; import type { Filter, FilterMeta } from './types'; /** @public */ @@ -44,7 +44,7 @@ export const getExistsFilterField = (filter: ExistsFilter) => { * * @public */ -export const buildExistsFilter = (field: DataViewFieldBase, indexPattern: DataViewBase) => { +export const buildExistsFilter = (field: DataViewFieldBase, indexPattern: DataViewBaseNoFields) => { return { meta: { index: indexPattern.id, diff --git a/packages/kbn-es-query/src/filters/build_filters/phrase_filter.ts b/packages/kbn-es-query/src/filters/build_filters/phrase_filter.ts index 0b990bd9cdfa77..485a10fddb0386 100644 --- a/packages/kbn-es-query/src/filters/build_filters/phrase_filter.ts +++ b/packages/kbn-es-query/src/filters/build_filters/phrase_filter.ts @@ -9,7 +9,7 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SerializableRecord } from '@kbn/utility-types'; import { get, has, isPlainObject } from 'lodash'; import type { Filter, FilterMeta } from './types'; -import type { DataViewFieldBase, DataViewBase } from '../../es_query'; +import type { DataViewFieldBase, DataViewBaseNoFields } from '../../es_query'; import { getConvertedValueForField } from './get_converted_value_for_field'; import { hasRangeKeys } from './range_filter'; @@ -101,7 +101,7 @@ export const getPhraseFilterValue = ( export const buildPhraseFilter = ( field: DataViewFieldBase, value: PhraseFilterValue, - indexPattern: DataViewBase + indexPattern: DataViewBaseNoFields ): PhraseFilter | ScriptedPhraseFilter => { const convertedValue = getConvertedValueForField(field, value); diff --git a/packages/kbn-es-query/src/filters/build_filters/phrases_filter.ts b/packages/kbn-es-query/src/filters/build_filters/phrases_filter.ts index 2e2b9540128679..09027a821da5d1 100644 --- a/packages/kbn-es-query/src/filters/build_filters/phrases_filter.ts +++ b/packages/kbn-es-query/src/filters/build_filters/phrases_filter.ts @@ -9,7 +9,7 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Filter, FilterMeta, FILTERS } from './types'; import { getPhraseScript, PhraseFilterValue } from './phrase_filter'; -import type { DataViewFieldBase, DataViewBase } from '../../es_query'; +import type { DataViewFieldBase, DataViewBaseNoFields } from '../../es_query'; export type PhrasesFilterMeta = FilterMeta & { params: PhraseFilterValue[]; // The unformatted values @@ -50,7 +50,7 @@ export const getPhrasesFilterField = (filter: PhrasesFilter) => { export const buildPhrasesFilter = ( field: DataViewFieldBase, params: PhraseFilterValue[], - indexPattern: DataViewBase + indexPattern: DataViewBaseNoFields ) => { const index = indexPattern.id; const type = FILTERS.PHRASES; diff --git a/packages/kbn-es-query/src/filters/build_filters/range_filter.ts b/packages/kbn-es-query/src/filters/build_filters/range_filter.ts index b1b0fdb0590abf..f80fce31cb8aed 100644 --- a/packages/kbn-es-query/src/filters/build_filters/range_filter.ts +++ b/packages/kbn-es-query/src/filters/build_filters/range_filter.ts @@ -10,7 +10,7 @@ import { map, reduce, mapValues, has, get, keys, pickBy } from 'lodash'; import type { SerializableRecord } from '@kbn/utility-types'; import type { Filter, FilterMeta, FilterMetaParams } from './types'; import { FILTERS } from './types'; -import type { DataViewBase, DataViewFieldBase } from '../../es_query'; +import type { DataViewFieldBase, DataViewBaseNoFields } from '../../es_query'; const OPERANDS_IN_RANGE = 2; @@ -133,7 +133,7 @@ const formatValue = (params: any[]) => * * @param field * @param params - * @param indexPattern + * @param dataView * @param formattedValue * @returns * @@ -142,7 +142,7 @@ const formatValue = (params: any[]) => export const buildRangeFilter = ( field: DataViewFieldBase, params: RangeFilterParams, - indexPattern?: DataViewBase, + indexPattern?: DataViewBaseNoFields, formattedValue?: string ): RangeFilter | ScriptedRangeFilter | MatchAllRangeFilter => { params = mapValues(params, (value: any) => (field.type === 'number' ? parseFloat(value) : value)); From 130bf7b9c5aa236d4371e436da0e337731731b20 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Tue, 21 May 2024 13:06:05 +0300 Subject: [PATCH 49/97] fix: [Obs AI Ops > Log Rate Analysis][KEYBOARD]: Table rows have icon tooltips that do not receive keyboard focus (#183734) Closes: https://github.com/elastic/observability-dev/issues/3400 ## Description The Obs LOg Rate Analysis table rows each have an icon that exposes a tooltip when hovered, but that tooltip cannot take keyboard focus, making it unavailable to keyboard users. Screenshot attached below. ### Steps to recreate 1. Open the [Obs Log Rate Analysis](https://issue-serverless-bbumq-pr182542-d34c16.kb.eu-west-1.aws.qa.elastic.cloud/app/ml/aiops/log_rate_analysis_index_select) view 2. Tab through the table, until focus is on an element after the table in the source order 6. Verify the icons in the table row(s) never receive focus and the tooltips never become visible ### What was changed?: 1. `EuiToolTip` was replaced to more accessible `EuiIconTip` ### Screen: https://github.com/elastic/kibana/assets/20072247/941a9b04-811f-4f01-bb48-00df96b1ced0 --- .../public/finder/saved_object_finder.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx index 034f63083be1d7..99e64ee919d8cb 100644 --- a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx +++ b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx @@ -16,13 +16,13 @@ import type { IUiSettingsClient } from '@kbn/core/public'; import { EuiFlexGroup, EuiFlexItem, - EuiIcon, EuiInMemoryTable, EuiLink, EuiSearchBarProps, EuiTableFieldDataColumnType, EuiText, EuiToolTip, + EuiIconTip, IconType, PropertySort, Query, @@ -255,14 +255,14 @@ export class SavedObjectFinderUi extends React.Component< ).getIconForSavedObject(item.simple); return ( - - - + ); }, } From ad03dfb1f5c8a8995c93895991ca4359c0b12ff6 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Tue, 21 May 2024 12:45:00 +0200 Subject: [PATCH 50/97] [Fleet] Add warning if need root integrations trying to be used with unprivileged agents (#183283) ## Summary Closes https://github.com/elastic/ingest-dev/issues/3252 ## Add integration Added warning to Add integration when the integration requires root privilege and the selected existing agent policy has unprivileged agents enrolled. To verify: - enroll an agent with docker (it has unprivileged: true) - try to add an integration that requires root e.g. auditd_manager - verify that when trying to save the integration, the warning callout is part of the confirm deploy modal image ## Add agent flyout Added warning to Add agent flyout when an unprivileged agent is detected in combination with an agent policy that has integrations requiring root To verify: - add an integration to an agent policy that requires root e.g. auditd_manager - open Add agent flyout, verify that the warning callout is visible image ### Open question: - Do we want to show the warning on `Add agent flyout` only for newly enrolled agents (in the last 10 mins like we query enrolled agents), or any unprivileged agents that are enrolled to this policy? - Decision: No longer applicable as we decided to not show a count here ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/constants.ts | 2 +- .../current_fields.json | 1 + .../current_mappings.json | 3 + .../check_registered_types.test.ts | 2 +- .../plugins/fleet/common/openapi/bundled.json | 3 + .../plugins/fleet/common/openapi/bundled.yaml | 2 + .../components/schemas/agent_policy.yaml | 2 +- .../schemas/new_package_policy.yaml | 2 + .../common/services/package_helpers.test.ts | 43 +++++- .../fleet/common/services/package_helpers.ts | 15 +- .../common/types/models/package_policy.ts | 1 + .../components/confirm_deploy_modal.tsx | 21 ++- .../page_steps/install_agent/index.tsx | 2 +- .../install_agent/install_agent_managed.tsx | 3 + .../install_agent_standalone.tsx | 2 + .../single_page_layout/confirm_modal.tsx | 81 +++++++++++ .../single_page_layout/hooks/form.tsx | 15 +- .../single_page_layout/index.test.tsx | 117 +++++++++++++-- .../single_page_layout/index.tsx | 16 +++ .../create_package_policy_page/types.ts | 1 + .../confirm_agent_enrollment.tsx | 7 +- .../agent_enrollment_confirmation_step.tsx | 29 ++-- .../steps/compute_steps.tsx | 5 +- .../steps/install_managed_agent_step.tsx | 3 + .../steps/install_standalone_agent_step.tsx | 3 + .../install_section.tsx | 5 + .../root_privileges_callout.test.tsx | 36 +++++ .../root_privileges_callout.tsx | 40 ++++++ .../fleet/server/saved_objects/index.ts | 16 +++ .../migrations/to_v8_15_0.test.ts | 85 +++++++++++ .../saved_objects/migrations/to_v8_15_0.ts | 39 +++++ .../fleet/server/services/agent_policy.ts | 5 +- .../fleet/server/services/package_policy.ts | 28 ++++ .../server/types/models/package_policy.ts | 3 + .../agent_policy_root_integrations.ts | 133 ++++++++++++++++++ .../apis/agent_policy/index.js | 1 + .../auditd_manager/auditd_manager-1.16.3.zip | Bin 0 -> 1075493 bytes .../apis/settings/enrollment.ts | 6 + 38 files changed, 738 insertions(+), 40 deletions(-) create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/confirm_modal.tsx create mode 100644 x-pack/plugins/fleet/public/components/enrollment_instructions/root_privileges_callout.test.tsx create mode 100644 x-pack/plugins/fleet/public/components/enrollment_instructions/root_privileges_callout.tsx create mode 100644 x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.test.ts create mode 100644 x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.ts create mode 100644 x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/auditd_manager/auditd_manager-1.16.3.zip diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts index 4244a5fed91aac..becc08d872f910 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts @@ -185,7 +185,7 @@ export const HASH_TO_VERSION_MAP = { 'ingest-agent-policies|0fd93cd11c019b118e93a9157c22057b': '10.1.0', 'ingest-download-sources|0b0f6828e59805bd07a650d80817c342': '10.0.0', 'ingest-outputs|b1237f7fdc0967709e75d65d208ace05': '10.6.0', - 'ingest-package-policies|a1a074bad36e68d54f98d2158d60f879': '10.0.0', + 'ingest-package-policies|aef7977b81f7930f23cbfd8711ba272e': '10.9.0', 'inventory-view|3d1b76c39bfb2cc8296b024d73854724': '10.0.0', 'kql-telemetry|3d1b76c39bfb2cc8296b024d73854724': '10.0.0', 'legacy-url-alias|0750774cf16475f88f2361e99cc5c8f0': '8.2.0', diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index 04343968ef9589..ad653171f27079 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -602,6 +602,7 @@ "overrides", "package", "package.name", + "package.requires_root", "package.title", "package.version", "policy_id", diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 6ee1f6d13521fa..6d54282cabafee 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -2017,6 +2017,9 @@ "name": { "type": "keyword" }, + "requires_root": { + "type": "boolean" + }, "title": { "type": "keyword" }, diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 015c517e9a6b83..7697bc0ec18582 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -112,7 +112,7 @@ describe('checking migration metadata changes on all registered SO types', () => "ingest-agent-policies": "803dc27e106440c41e8f3c3d8ee8bbb0821bcde2", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "daafff49255ab700e07491376fe89f04fc998b91", - "ingest-package-policies": "e6da7d0ee2996241ade23b3a7811fe5d3e449cb2", + "ingest-package-policies": "44c682a6bf23993c665f0a60a427f3c120a0a10d", "ingest_manager_settings": "91445219e7115ff0c45d1dabd5d614a80b421797", "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 053be80ff445a7..5cbc85dd12ce17 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -7446,6 +7446,9 @@ }, "title": { "type": "string" + }, + "requires_root": { + "type": "boolean" } }, "required": [ diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 041147d26efbb0..f0f5bf761ada83 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -4776,6 +4776,8 @@ components: type: string title: type: string + requires_root: + type: boolean required: - name - version diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml index 02f302e025d67f..5f8a2f578132e8 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml @@ -51,7 +51,7 @@ properties: agents: type: number unprivileged_agents: - type: number + type: number agent_features: type: array items: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml index b7b904badad08f..7fb94651b9fee3 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml @@ -13,6 +13,8 @@ properties: type: string title: type: string + requires_root: + type: boolean required: - name - version diff --git a/x-pack/plugins/fleet/common/services/package_helpers.test.ts b/x-pack/plugins/fleet/common/services/package_helpers.test.ts index 71d3a9018ed5e0..0004ddfe404241 100644 --- a/x-pack/plugins/fleet/common/services/package_helpers.test.ts +++ b/x-pack/plugins/fleet/common/services/package_helpers.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { isRootPrivilegesRequired } from './package_helpers'; +import { getRootIntegrations, isRootPrivilegesRequired } from './package_helpers'; describe('isRootPrivilegesRequired', () => { it('should return true if root privileges is required at root level', () => { @@ -38,3 +38,44 @@ describe('isRootPrivilegesRequired', () => { expect(res).toBe(false); }); }); + +describe('getRootIntegrations', () => { + it('should return packages that require root', () => { + const res = getRootIntegrations([ + { + package: { + requires_root: true, + name: 'auditd_manager', + title: 'Auditd Manager', + }, + } as any, + { + package: { + requires_root: false, + name: 'system', + title: 'System', + }, + } as any, + { + package: { + name: 'test', + title: 'Test', + }, + } as any, + { + package: { + requires_root: true, + name: 'auditd_manager', + title: 'Auditd Manager', + }, + } as any, + {} as any, + ]); + expect(res).toEqual([{ name: 'auditd_manager', title: 'Auditd Manager' }]); + }); + + it('should return empty array if no packages require root', () => { + const res = getRootIntegrations([]); + expect(res).toEqual([]); + }); +}); diff --git a/x-pack/plugins/fleet/common/services/package_helpers.ts b/x-pack/plugins/fleet/common/services/package_helpers.ts index 0282d218cec39b..18c9368cd388a0 100644 --- a/x-pack/plugins/fleet/common/services/package_helpers.ts +++ b/x-pack/plugins/fleet/common/services/package_helpers.ts @@ -5,7 +5,9 @@ * 2.0. */ -import type { PackageInfo } from '../types'; +import { uniqBy } from 'lodash'; + +import type { PackageInfo, PackagePolicy } from '../types'; /** * Return true if a package need Elastic Agent to be run as root/administrator @@ -16,3 +18,14 @@ export function isRootPrivilegesRequired(packageInfo: PackageInfo) { packageInfo.data_streams?.some((d) => d.agent?.privileges?.root) ); } + +export function getRootIntegrations( + packagePolicies: PackagePolicy[] +): Array<{ name: string; title: string }> { + return uniqBy( + packagePolicies + .map((policy) => policy.package) + .filter((pkg) => (pkg && pkg.requires_root) || false), + (pkg) => pkg!.name + ).map((pkg) => ({ name: pkg!.name, title: pkg!.title })); +} diff --git a/x-pack/plugins/fleet/common/types/models/package_policy.ts b/x-pack/plugins/fleet/common/types/models/package_policy.ts index d7c21d39161888..08cff4870b27e7 100644 --- a/x-pack/plugins/fleet/common/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/package_policy.ts @@ -13,6 +13,7 @@ export interface PackagePolicyPackage { title: string; version: string; experimental_data_stream_features?: ExperimentalDataStreamFeature[]; + requires_root?: boolean; } export interface PackagePolicyConfigRecordEntry { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/confirm_deploy_modal.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/confirm_deploy_modal.tsx index 1198db3034dee4..34b9ef59bd8c6b 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/confirm_deploy_modal.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/confirm_deploy_modal.tsx @@ -11,13 +11,23 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import type { AgentPolicy } from '../../../types'; +import { UnprivilegedAgentsCallout } from '../create_package_policy_page/single_page_layout/confirm_modal'; export const ConfirmDeployAgentPolicyModal: React.FunctionComponent<{ onConfirm: () => void; onCancel: () => void; agentCount: number; agentPolicy: AgentPolicy; -}> = ({ onConfirm, onCancel, agentCount, agentPolicy }) => { + showUnprivilegedAgentsCallout?: boolean; + unprivilegedAgentsCount?: number; +}> = ({ + onConfirm, + onCancel, + agentCount, + agentPolicy, + showUnprivilegedAgentsCallout = false, + unprivilegedAgentsCount = 0, +}) => { return ( + {showUnprivilegedAgentsCallout && ( + <> + + + + )} = ( const [localIsManaged, setLocalIsManaged] = useState(props.isManaged); const [useLocalState, setUseLocalState] = useState(false); - const enrolledAgentIds = usePollingAgentCount(props.agentPolicy?.id || '', { + const { enrolledAgentIds } = usePollingAgentCount(props.agentPolicy?.id || '', { noLowerTimeLimit: true, pollImmediately: true, }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx index 8419534a406f82..7b442a5af23a38 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx @@ -21,6 +21,8 @@ import { ManualInstructions } from '../../../../../../../../../components/enroll import { KubernetesManifestApplyStep } from '../../../../../../../../../components/agent_enrollment_flyout/steps/run_k8s_apply_command_step'; +import { getRootIntegrations } from '../../../../../../../../../../common/services'; + import type { InstallAgentPageProps } from './types'; export const InstallElasticAgentManagedPageStep: React.FC = (props) => { @@ -80,6 +82,7 @@ export const InstallElasticAgentManagedPageStep: React.FC fullCopyButton: true, fleetServerHost, onCopy: () => setCommandCopied(true), + rootIntegrations: getRootIntegrations(agentPolicy?.package_policies ?? []), }), ]; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_standalone.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_standalone.tsx index f49aaefd65dd9b..e2f92331759acc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_standalone.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_standalone.tsx @@ -12,6 +12,7 @@ import { safeDump } from 'js-yaml'; import type { FullAgentPolicy } from '../../../../../../../../../../common/types/models/agent_policy'; import { API_VERSIONS } from '../../../../../../../../../../common/constants'; +import { getRootIntegrations } from '../../../../../../../../../../common/services'; import { AgentStandaloneBottomBar, StandaloneModeWarningCallout, @@ -112,6 +113,7 @@ export const InstallElasticAgentStandalonePageStep: React.FC setCommandCopied(true), + rootIntegrations: getRootIntegrations(agentPolicy?.package_policies ?? []), }), ]; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/confirm_modal.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/confirm_modal.tsx new file mode 100644 index 00000000000000..8ae069de21e551 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/confirm_modal.tsx @@ -0,0 +1,81 @@ +/* + * 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 { EuiCallOut, EuiConfirmModal } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; + +export interface UnprivilegedConfirmModalProps { + onConfirm: () => void; + onCancel: () => void; + agentPolicyName: string; + unprivilegedAgentsCount: number; +} + +export const UnprivilegedConfirmModal: React.FC = ({ + onConfirm, + onCancel, + agentPolicyName, + unprivilegedAgentsCount, +}: UnprivilegedConfirmModalProps) => { + return ( + + } + onCancel={onCancel} + onConfirm={onConfirm} + cancelButtonText={ + + } + confirmButtonText={ + + } + buttonColor="warning" + > + + + ); +}; + +export const UnprivilegedAgentsCallout: React.FC<{ + agentPolicyName: string; + unprivilegedAgentsCount: number; +}> = ({ agentPolicyName, unprivilegedAgentsCount }) => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index b256349f5d6b96..f7b46d95f1e678 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -31,7 +31,10 @@ import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, } from '../../../../../../../../common'; -import { getMaxPackageName } from '../../../../../../../../common/services'; +import { + getMaxPackageName, + isRootPrivilegesRequired, +} from '../../../../../../../../common/services'; import { useConfirmForceInstall } from '../../../../../../integrations/hooks'; import { validatePackagePolicy, validationHasErrors } from '../../services'; import type { PackagePolicyValidationResults } from '../../services'; @@ -266,6 +269,16 @@ export function useOnSubmit({ setFormState('CONFIRM'); return; } + if ( + packageInfo && + isRootPrivilegesRequired(packageInfo) && + (agentPolicy?.unprivileged_agents ?? 0) > 0 && + formState !== 'CONFIRM' && + formState !== 'CONFIRM_UNPRIVILEGED' + ) { + setFormState('CONFIRM_UNPRIVILEGED'); + return; + } let createdPolicy = overrideCreatedAgentPolicy; if (selectedPolicyTab === SelectedPolicyTab.NEW && !overrideCreatedAgentPolicy) { try { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx index e8ef63a7bfdbc5..28f8c380eb2eb1 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx @@ -37,14 +37,28 @@ jest.mock('../../../../hooks', () => { sendGetAgentStatus: jest.fn().mockResolvedValue({ data: { results: { total: 0 } } }), useGetAgentPolicies: jest.fn().mockReturnValue({ data: { - items: [{ id: 'agent-policy-1', name: 'Agent policy 1', namespace: 'default' }], + items: [ + { + id: 'agent-policy-1', + name: 'Agent policy 1', + namespace: 'default', + unprivileged_agents: 1, + }, + ], }, error: undefined, isLoading: false, resendRequest: jest.fn(), } as any), sendGetOneAgentPolicy: jest.fn().mockResolvedValue({ - data: { item: { id: 'agent-policy-1', name: 'Agent policy 1', namespace: 'default' } }, + data: { + item: { + id: 'agent-policy-1', + name: 'Agent policy 1', + namespace: 'default', + unprivileged_agents: 1, + }, + }, }), useGetPackageInfoByKeyQuery: jest.fn(), sendGetSettings: jest.fn().mockResolvedValue({ @@ -129,16 +143,9 @@ describe('when on the package policy create page', () => { /> )); - let mockPackageInfo: any; - - beforeEach(() => { - testRenderer = createFleetTestRendererMock(); - mockApiCalls(testRenderer.startServices.http); - testRenderer.mountHistory.push(createPageUrlPath); - jest.mocked(useStartServices().application.navigateToApp).mockReset(); - - mockPackageInfo = { + function getMockPackageInfo(requiresRoot?: boolean) { + return { data: { item: { name: 'nginx', @@ -193,12 +200,25 @@ describe('when on the package policy create page', () => { latestVersion: '1.3.0', keepPoliciesUpToDate: false, status: 'not_installed', + agent: { + privileges: { + root: requiresRoot, + }, + }, }, }, isLoading: false, }; + } - (useGetPackageInfoByKeyQuery as jest.Mock).mockReturnValue(mockPackageInfo); + beforeEach(() => { + testRenderer = createFleetTestRendererMock(); + mockApiCalls(testRenderer.startServices.http); + testRenderer.mountHistory.push(createPageUrlPath); + + jest.mocked(useStartServices().application.navigateToApp).mockReset(); + + (useGetPackageInfoByKeyQuery as jest.Mock).mockReturnValue(getMockPackageInfo()); }); describe('and Route state is provided via Fleet HashRouter', () => { @@ -280,6 +300,73 @@ describe('when on the package policy create page', () => { vars: undefined, }; + test('should show unprivileged warning modal on submit if conditions match', async () => { + (useGetPackageInfoByKeyQuery as jest.Mock).mockReturnValue(getMockPackageInfo(true)); + await act(async () => { + render('agent-policy-1'); + }); + + let saveBtn: HTMLElement; + + await waitFor(() => { + saveBtn = renderResult.getByText(/Save and continue/).closest('button')!; + expect(saveBtn).not.toBeDisabled(); + }); + + await act(async () => { + fireEvent.click(saveBtn); + }); + + await waitFor(() => { + expect( + renderResult.getByText('Unprivileged agents enrolled to the selected policy') + ).toBeInTheDocument(); + expect(renderResult.getByTestId('unprivilegedAgentsCallout').textContent).toContain( + 'This integration requires Elastic Agents to have root privileges. There is 1 agent running in an unprivileged mode using Agent policy 1. To ensure that all data required by the integration can be collected, re-enroll the agent using an account with root privileges.' + ); + }); + + await waitFor(() => { + saveBtn = renderResult.getByText(/Add integration/).closest('button')!; + }); + + await act(async () => { + fireEvent.click(saveBtn); + }); + + expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledTimes(1); + }); + + test('should show unprivileged warning and agents modal on submit if conditions match', async () => { + (useGetPackageInfoByKeyQuery as jest.Mock).mockReturnValue(getMockPackageInfo(true)); + (sendGetAgentStatus as jest.MockedFunction).mockResolvedValueOnce({ + data: { results: { total: 1 } }, + }); + await act(async () => { + render('agent-policy-1'); + }); + + await act(async () => { + fireEvent.click(renderResult.getByText(/Save and continue/).closest('button')!); + }); + + await waitFor(() => { + expect(renderResult.getByText('This action will update 1 agent')).toBeInTheDocument(); + expect( + renderResult.getByText('Unprivileged agents enrolled to the selected policy') + ).toBeInTheDocument(); + expect(renderResult.getByTestId('unprivilegedAgentsCallout').textContent).toContain( + 'This integration requires Elastic Agents to have root privileges. There is 1 agent running in an unprivileged mode using Agent policy 1. To ensure that all data required by the integration can be collected, re-enroll the agent using an account with root privileges.' + ); + }); + + await act(async () => { + fireEvent.click(renderResult.getAllByText(/Save and deploy changes/)[1].closest('button')!); + }); + + expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalled(); + }); + test('should create package policy on submit when query param agent policy id is set', async () => { await act(async () => { render('agent-policy-1'); @@ -384,10 +471,10 @@ describe('when on the package policy create page', () => { test('should create agent policy without sys monitoring when new hosts is selected for system integration', async () => { (useGetPackageInfoByKeyQuery as jest.Mock).mockReturnValue({ - ...mockPackageInfo, + ...getMockPackageInfo(), data: { item: { - ...mockPackageInfo.data!.item, + ...getMockPackageInfo().data!.item, name: 'system', }, }, @@ -472,7 +559,7 @@ describe('when on the package policy create page', () => { expect(renderResult.getByText(/Save and continue/).closest('button')!).toBeDisabled(); }); - test('should not show modal if agent policy has agents', async () => { + test('should show modal if agent policy has agents', async () => { (sendGetAgentStatus as jest.MockedFunction).mockResolvedValueOnce({ data: { results: { total: 1 } }, }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx index 572b7a4136ea54..2184693e6623ad 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx @@ -75,6 +75,7 @@ import { useDevToolsRequest, useOnSubmit, useSetupTechnology } from './hooks'; import { PostInstallCloudFormationModal } from './components/cloud_security_posture/post_install_cloud_formation_modal'; import { PostInstallGoogleCloudShellModal } from './components/cloud_security_posture/post_install_google_cloud_shell_modal'; import { PostInstallAzureArmTemplateModal } from './components/cloud_security_posture/post_install_azure_arm_template_modal'; +import { UnprivilegedConfirmModal } from './confirm_modal'; const StepsWithLessPadding = styled(EuiSteps)` .euiStep__content { @@ -436,6 +437,7 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ /> ); } + return ( @@ -445,8 +447,22 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ agentPolicy={agentPolicy} onConfirm={onSubmit} onCancel={() => setFormState('VALID')} + showUnprivilegedAgentsCallout={Boolean( + packageInfo && + isRootPrivilegesRequired(packageInfo) && + (agentPolicy?.unprivileged_agents ?? 0) > 0 + )} + unprivilegedAgentsCount={agentPolicy?.unprivileged_agents ?? 0} /> )} + {formState === 'CONFIRM_UNPRIVILEGED' && agentPolicy ? ( + setFormState('VALID')} + onConfirm={onSubmit} + unprivilegedAgentsCount={agentPolicy?.unprivileged_agents ?? 0} + agentPolicyName={agentPolicy?.name ?? ''} + /> + ) : null} {formState === 'SUBMITTED_NO_AGENTS' && agentPolicy && packageInfo && diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/types.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/types.ts index 1a203c8bf2e60b..0d533597a60eb8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/types.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/types.ts @@ -19,6 +19,7 @@ export type PackagePolicyFormState = | 'VALID' | 'INVALID' | 'CONFIRM' + | 'CONFIRM_UNPRIVILEGED' | 'LOADING' | 'SUBMITTED' | 'SUBMITTED_NO_AGENTS' diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/confirm_agent_enrollment.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/confirm_agent_enrollment.tsx index 342f5f8f732497..53448aefd44c60 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/confirm_agent_enrollment.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/confirm_agent_enrollment.tsx @@ -41,7 +41,10 @@ const POLLING_INTERVAL_MS = 5 * 1000; // 5 sec * @param policyId * @returns agentIds */ -export const usePollingAgentCount = (policyId: string, opts?: UsePollingAgentCountOptions) => { +export const usePollingAgentCount = ( + policyId: string, + opts?: UsePollingAgentCountOptions +): { enrolledAgentIds: string[] } => { const [agentIds, setAgentIds] = useState([]); const [didPollInitially, setDidPollInitially] = useState(false); const timeout = useRef(undefined); @@ -89,7 +92,7 @@ export const usePollingAgentCount = (policyId: string, opts?: UsePollingAgentCou isAborted = true; }; }, [agentIds, policyId, kuery, getNewAgentIds]); - return agentIds; + return { enrolledAgentIds: agentIds }; }; export const ConfirmAgentEnrollment: React.FunctionComponent = ({ diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/agent_enrollment_confirmation_step.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/agent_enrollment_confirmation_step.tsx index fc2ee7d131baf2..761b662917d46f 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/agent_enrollment_confirmation_step.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/agent_enrollment_confirmation_step.tsx @@ -65,19 +65,22 @@ export const AgentEnrollmentConfirmationStep = ({ : i18n.translate('xpack.fleet.agentEnrollment.stepAgentEnrollmentConfirmation', { defaultMessage: 'Confirm agent enrollment', }), - children: - !!isComplete || poll ? ( - - ) : ( - - ), + children: ( + <> + {!!isComplete || poll ? ( + + ) : ( + + )} + + ), status: !isComplete ? 'incomplete' : 'complete', }; }; diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx index 7cbe8125fcf384..615c6399b202f8 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx @@ -14,6 +14,7 @@ import type { EuiContainedStepProps } from '@elastic/eui/src/components/steps/st import type { FullAgentPolicy } from '../../../../common/types/models/agent_policy'; import { API_VERSIONS } from '../../../../common/constants'; +import { getRootIntegrations } from '../../../../common/services'; import { fullAgentPolicyToYaml, agentPolicyRouteService } from '../../../services'; import { getGcpIntegrationDetailsFromAgentPolicy } from '../../cloud_security_posture/services'; @@ -168,6 +169,7 @@ export const StandaloneSteps: React.FunctionComponent = ({ installCommand: standaloneInstallCommands, isK8s, cloudSecurityIntegration, + rootIntegrations: getRootIntegrations(selectedPolicy?.package_policies ?? []), }) ); @@ -225,7 +227,7 @@ export const ManagedSteps: React.FunctionComponent = ({ const apiKeyData = apiKey?.data; const enrollToken = apiKey.data ? apiKey.data.item.api_key : ''; - const enrolledAgentIds = usePollingAgentCount(selectedPolicy?.id || ''); + const { enrolledAgentIds } = usePollingAgentCount(selectedPolicy?.id || ''); const agentVersion = useAgentVersion(); @@ -309,6 +311,7 @@ export const ManagedSteps: React.FunctionComponent = ({ cloudSecurityIntegration, fleetServerHost, enrollToken, + rootIntegrations: getRootIntegrations(selectedPolicy?.package_policies ?? []), }) ); } diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_managed_agent_step.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_managed_agent_step.tsx index 2a9c0536f33898..566d73aff7fc93 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_managed_agent_step.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_managed_agent_step.tsx @@ -29,6 +29,7 @@ export const InstallManagedAgentStep = ({ isComplete, fullCopyButton, onCopy, + rootIntegrations, }: { selectedApiKeyId?: string; apiKeyData?: GetOneEnrollmentAPIKeyResponse | null; @@ -40,6 +41,7 @@ export const InstallManagedAgentStep = ({ isComplete?: boolean; fullCopyButton?: boolean; onCopy?: () => void; + rootIntegrations?: Array<{ name: string; title: string }>; }): EuiContainedStepProps => { const nonCompleteStatus = selectedApiKeyId ? undefined : 'disabled'; const status = isComplete ? 'complete' : nonCompleteStatus; @@ -58,6 +60,7 @@ export const InstallManagedAgentStep = ({ onCopy={onCopy} fullCopyButton={fullCopyButton} fleetServerHost={fleetServerHost} + rootIntegrations={rootIntegrations} /> ) : ( diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_standalone_agent_step.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_standalone_agent_step.tsx index 90ed25225b6086..2e11cc165d4f74 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_standalone_agent_step.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_standalone_agent_step.tsx @@ -23,6 +23,7 @@ export const InstallStandaloneAgentStep = ({ isComplete, fullCopyButton, onCopy, + rootIntegrations, }: { installCommand: CommandsByPlatform; isK8s?: K8sMode; @@ -30,6 +31,7 @@ export const InstallStandaloneAgentStep = ({ isComplete?: boolean; fullCopyButton?: boolean; onCopy?: () => void; + rootIntegrations?: Array<{ name: string; title: string }>; }): EuiContainedStepProps => { return { title: i18n.translate('xpack.fleet.agentEnrollment.stepEnrollAndRunAgentTitle', { @@ -43,6 +45,7 @@ export const InstallStandaloneAgentStep = ({ onCopy={onCopy} fullCopyButton={fullCopyButton} isManaged={false} + rootIntegrations={rootIntegrations} /> ), status: isComplete ? 'complete' : undefined, diff --git a/x-pack/plugins/fleet/public/components/enrollment_instructions/install_section.tsx b/x-pack/plugins/fleet/public/components/enrollment_instructions/install_section.tsx index 44a251fefd7bce..372f81ca47f96a 100644 --- a/x-pack/plugins/fleet/public/components/enrollment_instructions/install_section.tsx +++ b/x-pack/plugins/fleet/public/components/enrollment_instructions/install_section.tsx @@ -14,6 +14,8 @@ import { InstallationMessage } from '../agent_enrollment_flyout/installation_mes import type { K8sMode, CloudSecurityIntegration } from '../agent_enrollment_flyout/types'; import { PlatformSelector } from '../platform_selector'; +import { RootPrivilegesCallout } from './root_privileges_callout'; + interface Props { installCommand: CommandsByPlatform; isK8s: K8sMode | undefined; @@ -23,6 +25,7 @@ interface Props { fullCopyButton?: boolean; isManaged?: boolean; onCopy?: () => void; + rootIntegrations?: Array<{ name: string; title: string }>; } export const InstallSection: React.FunctionComponent = ({ @@ -34,10 +37,12 @@ export const InstallSection: React.FunctionComponent = ({ fullCopyButton = false, isManaged = true, onCopy, + rootIntegrations, }) => { return ( <> + { + function render(rootIntegrations?: Array<{ name: string; title: string }>) { + cleanup(); + const renderer = createFleetTestRendererMock(); + const results = renderer.render(); + + return results; + } + + it('should render callout requiring root privileges', async () => { + const renderResult = render([{ name: 'auditd_manager', title: 'Auditd Manager' }]); + + await waitFor(() => { + expect(renderResult.getByText('Root privileges required')).toBeInTheDocument(); + expect(renderResult.getByTestId('rootPrivilegesCallout').textContent).toContain( + 'This agent policy contains the following integrations that require Elastic Agents to have root privileges. To ensure that all data required by the integrations can be collected, enroll the agents using an account with root privileges.' + ); + expect(renderResult.getByText('Auditd Manager')).toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/plugins/fleet/public/components/enrollment_instructions/root_privileges_callout.tsx b/x-pack/plugins/fleet/public/components/enrollment_instructions/root_privileges_callout.tsx new file mode 100644 index 00000000000000..3c115a78567af7 --- /dev/null +++ b/x-pack/plugins/fleet/public/components/enrollment_instructions/root_privileges_callout.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const RootPrivilegesCallout: React.FC<{ + rootIntegrations?: Array<{ name: string; title: string }>; +}> = ({ rootIntegrations = [] }) => { + return rootIntegrations.length > 0 ? ( + <> + + +
    + {rootIntegrations.map((item) => ( +
  • {item.title}
  • + ))} +
+
+ + + ) : null; +}; diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index f74366d924c969..457711b2646e73 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -86,6 +86,7 @@ import { } from './migrations/security_solution/to_v8_11_0_2'; import { settingsV1 } from './model_versions/v1'; import { packagePolicyV10OnWriteScanFix } from './model_versions/security_solution'; +import { migratePackagePolicySetRequiresRootToV8150 } from './migrations/to_v8_15_0'; /* * Saved object types and mappings @@ -433,6 +434,7 @@ export const getSavedObjectTypes = ( name: { type: 'keyword' }, title: { type: 'keyword' }, version: { type: 'keyword' }, + requires_root: { type: 'boolean' }, }, }, elasticsearch: { @@ -549,6 +551,20 @@ export const getSavedObjectTypes = ( }, ], }, + '11': { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + package: { properties: { requires_root: { type: 'boolean' } } }, + }, + }, + { + type: 'data_backfill', + backfillFn: migratePackagePolicySetRequiresRootToV8150, + }, + ], + }, }, migrations: { '7.10.0': migratePackagePolicyToV7100, diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.test.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.test.ts new file mode 100644 index 00000000000000..656dfaddc75d68 --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.test.ts @@ -0,0 +1,85 @@ +/* + * 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 { + createModelVersionTestMigrator, + type ModelVersionTestMigrator, +} from '@kbn/core-test-helpers-model-versions'; + +import type { SavedObject } from '@kbn/core-saved-objects-server'; + +import type { PackagePolicy } from '../../../common'; +import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../common'; +import { getSavedObjectTypes } from '..'; + +const getPolicyDoc = (packageName: string): SavedObject => { + return { + id: 'mock-saved-object-id', + attributes: { + name: 'Some Policy Name', + package: { + name: packageName, + title: '', + version: '', + }, + id: 'package-policy-1', + policy_id: '', + enabled: true, + namespace: '', + revision: 0, + updated_at: '', + updated_by: '', + created_at: '', + created_by: '', + inputs: [], + }, + type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + references: [], + }; +}; + +describe('8.15.0 Requires Root Package Policy migration', () => { + let migrator: ModelVersionTestMigrator; + + beforeEach(() => { + migrator = createModelVersionTestMigrator({ + type: getSavedObjectTypes()[PACKAGE_POLICY_SAVED_OBJECT_TYPE], + }); + }); + + describe('backfilling `requires_root`', () => { + it('should backfill `requires_root` field as `true` for `endpoint` package on Kibana update', () => { + const migratedPolicyConfigSO = migrator.migrate({ + document: getPolicyDoc('endpoint'), + fromVersion: 10, + toVersion: 11, + }); + + expect(migratedPolicyConfigSO.attributes.package?.requires_root).toBe(true); + }); + + it('should backfill `requires_root` field as `true` for `auditd_manager` package on Kibana update', () => { + const migratedPolicyConfigSO = migrator.migrate({ + document: getPolicyDoc('auditd_manager'), + fromVersion: 10, + toVersion: 11, + }); + + expect(migratedPolicyConfigSO.attributes.package?.requires_root).toBe(true); + }); + + it('should not backfill `requires_root` field as `true` for other package on Kibana update', () => { + const migratedPolicyConfigSO = migrator.migrate({ + document: getPolicyDoc('other'), + fromVersion: 10, + toVersion: 11, + }); + + expect(migratedPolicyConfigSO.attributes.package!.requires_root).toBe(undefined); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.ts new file mode 100644 index 00000000000000..bd0771ab7b5838 --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_15_0.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + SavedObjectModelDataBackfillFn, + SavedObjectUnsanitizedDoc, +} from '@kbn/core-saved-objects-server'; + +import type { PackagePolicy } from '../../../common'; + +// backfill existing package policies with packages requiring root in 8.15.0 +const ROOT_PACKAGES = [ + 'endpoint', + 'universal_profiling_agent', + 'system_audit', + 'network_traffic', + 'fim', + 'auditd_manager', +]; + +export const migratePackagePolicySetRequiresRootToV8150: SavedObjectModelDataBackfillFn< + PackagePolicy, + PackagePolicy +> = (packagePolicyDoc) => { + const updatedPackagePolicyDoc: SavedObjectUnsanitizedDoc = packagePolicyDoc; + + if ( + updatedPackagePolicyDoc.attributes.package && + ROOT_PACKAGES.includes(updatedPackagePolicyDoc.attributes.package.name) + ) { + updatedPackagePolicyDoc.attributes.package.requires_root = true; + } + + return { attributes: updatedPackagePolicyDoc.attributes }; +}; diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index a75028be595485..afa7b7c5d92de2 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -383,7 +383,10 @@ class AgentPolicyService { throw new FleetError(agentPolicySO.error.message); } - const agentPolicy = { id: agentPolicySO.id, ...agentPolicySO.attributes }; + const agentPolicy = { + id: agentPolicySO.id, + ...agentPolicySO.attributes, + }; if (withPackagePolicies) { agentPolicy.package_policies = diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index 45753540af2565..05ccacad3d7043 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -328,6 +328,13 @@ class PackagePolicyClientImpl implements PackagePolicyClient { logger, }); } + + if (enrichedPackagePolicy.package && pkgInfo?.agent?.privileges?.root) { + enrichedPackagePolicy.package = { + ...enrichedPackagePolicy.package, + requires_root: pkgInfo?.agent?.privileges?.root ?? false, + }; + } } const isoDate = new Date().toISOString(); @@ -457,6 +464,13 @@ class PackagePolicyClientImpl implements PackagePolicyClient { : inputs; elasticsearch = pkgInfo?.elasticsearch; + + if (packagePolicy.package && pkgInfo?.agent?.privileges?.root) { + packagePolicy.package = { + ...packagePolicy.package, + requires_root: pkgInfo?.agent?.privileges?.root ?? false, + }; + } } policiesToCreate.push({ @@ -862,6 +876,13 @@ class PackagePolicyClientImpl implements PackagePolicyClient { assetsMap ); elasticsearchPrivileges = pkgInfo.elasticsearch?.privileges; + + if (restOfPackagePolicy.package && pkgInfo?.agent?.privileges?.root) { + restOfPackagePolicy.package = { + ...restOfPackagePolicy.package, + requires_root: pkgInfo?.agent?.privileges?.root ?? false, + }; + } } // Handle component template/mappings updates for experimental features, e.g. synthetic source @@ -1042,6 +1063,13 @@ class PackagePolicyClientImpl implements PackagePolicyClient { assetsMap ); elasticsearchPrivileges = pkgInfo.elasticsearch?.privileges; + + if (restOfPackagePolicy.package && pkgInfo?.agent?.privileges?.root) { + restOfPackagePolicy.package = { + ...restOfPackagePolicy.package, + requires_root: pkgInfo?.agent?.privileges?.root ?? false, + }; + } } } diff --git a/x-pack/plugins/fleet/server/types/models/package_policy.ts b/x-pack/plugins/fleet/server/types/models/package_policy.ts index b7129865560684..fdde8557178428 100644 --- a/x-pack/plugins/fleet/server/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/package_policy.ts @@ -105,6 +105,7 @@ const PackagePolicyBaseSchema = { title: schema.string(), version: schema.string(), experimental_data_stream_features: schema.maybe(ExperimentalDataStreamFeatures), + requires_root: schema.maybe(schema.boolean()), }) ), // Deprecated TODO create remove issue @@ -148,6 +149,7 @@ const CreatePackagePolicyProps = { title: schema.maybe(schema.string()), version: schema.string(), experimental_data_stream_features: schema.maybe(ExperimentalDataStreamFeatures), + requires_root: schema.maybe(schema.boolean()), }) ), // Deprecated TODO create remove issue @@ -222,6 +224,7 @@ export const SimplifiedCreatePackagePolicyRequestBodySchema = name: schema.string(), version: schema.string(), experimental_data_stream_features: schema.maybe(ExperimentalDataStreamFeatures), + requires_root: schema.maybe(schema.boolean()), }), }); diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts new file mode 100644 index 00000000000000..1de66d530d184c --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts @@ -0,0 +1,133 @@ +/* + * 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 { v4 as uuidv4 } from 'uuid'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { setupFleetAndAgents } from '../agents/services'; +import { skipIfNoDockerRegistry } from '../../helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + describe('agent policy with root integrations', () => { + skipIfNoDockerRegistry(providerContext); + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + }); + setupFleetAndAgents(providerContext); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + }); + + describe('root integrations', () => { + before(async () => { + await supertest + .post(`/api/fleet/epm/packages/auditd_manager/1.16.3`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + }); + after(async () => { + await supertest + .delete(`/api/fleet/epm/packages/auditd_manager/1.16.3`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + }); + + it('should have root integrations in agent policy response', async () => { + // Create agent policy + const { + body: { + item: { id: agentPolicyId }, + }, + } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: `Test policy ${uuidv4()}`, + namespace: 'default', + monitoring_enabled: [], + }) + .expect(200); + + await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: `auditd-${uuidv4()}`, + description: '', + namespace: 'default', + policy_id: agentPolicyId, + package: { + name: 'auditd_manager', + version: '1.16.3', + }, + inputs: [ + { + type: 'audit/auditd', + policy_template: 'auditd', + enabled: true, + streams: [ + { + enabled: true, + data_stream: { type: 'logs', dataset: 'auditd_manager.auditd' }, + vars: { + socket_type: { value: '', type: 'select' }, + immutable: { value: false, type: 'bool' }, + resolve_ids: { value: true, type: 'bool' }, + failure_mode: { value: 'silent', type: 'text' }, + audit_rules: { type: 'textarea' }, + audit_rule_files: { type: 'text' }, + preserve_original_event: { value: false, type: 'bool' }, + backlog_limit: { value: 8192, type: 'text' }, + rate_limit: { value: 0, type: 'text' }, + include_warnings: { value: false, type: 'bool' }, + backpressure_strategy: { value: 'auto', type: 'text' }, + tags: { value: ['auditd_manager-auditd'], type: 'text' }, + processors: { type: 'yaml' }, + }, + }, + ], + }, + ], + }) + .expect(200); + + // Fetch the agent policy + const { + body: { item: agentPolicy }, + } = await supertest + .get(`/api/fleet/agent_policies/${agentPolicyId}`) + .set('kbn-xsrf', 'xxxx'); + + // Check that the root integrations are correct + expect( + Object.values(agentPolicy.package_policies.map((policy: any) => policy.package)) + ).to.eql([ + { + name: 'auditd_manager', + title: 'Auditd Manager', + requires_root: true, + version: '1.16.3', + }, + ]); + + // Cleanup agent and package policy + await supertest + .post(`/api/fleet/agent_policies/delete`) + .send({ agentPolicyId }) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/index.js b/x-pack/test/fleet_api_integration/apis/agent_policy/index.js index 559367c1a6b819..66abbf8d6a5b31 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/index.js +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/index.js @@ -11,5 +11,6 @@ export default function loadTests({ loadTestFile }) { loadTestFile(require.resolve('./agent_policy')); loadTestFile(require.resolve('./agent_policy_datastream_permissions')); loadTestFile(require.resolve('./privileges')); + loadTestFile(require.resolve('./agent_policy_root_integrations')); }); } diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/auditd_manager/auditd_manager-1.16.3.zip b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/auditd_manager/auditd_manager-1.16.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..5b9c055710eff25783056c7a84880b50d9fd87e1 GIT binary patch literal 1075493 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

D3H}RS4}J*) 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

JHSgix(J=g+P`$@_X=Z#pc|GYxfG= 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%0ACW%JjMYOtP8mNn%!hs80Bay0*7uEk?} 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

=3^cqAPJes*@#;E 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°^zMLCj{t*^& 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 X$BFy*0TKn-kN+LQf&8^c@E`4e%1%#G literal 0 HcmV?d00001 diff --git a/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts b/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts index 1bb0ca927f9a21..9c1cf8ea59c511 100644 --- a/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts +++ b/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts @@ -42,6 +42,12 @@ export default function (providerContext: FtrProviderContext) { describe('should respond with correct enrollment settings', async function () { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/fleet_server'); + // package verification error without force + await supertest + .post(`/api/fleet/epm/packages/fleet_server`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); }); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/fleet_server'); From 3290d395c835af3cc1bda31cf0d1eb88bcdf16a7 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 21 May 2024 13:17:44 +0200 Subject: [PATCH 51/97] Add `httpVersion` and `protocol` fields to `KibanaRequest` (#183725) ## Summary Part of https://github.com/elastic/kibana/issues/7104 Prepare the work for `http2` support by introducing the `httpVersion` and `protocol` fields to the `KibanaRequest` type and implementation. Proper handling of h2 protocol for those fields will be added in the PR implementing http2 (https://github.com/elastic/kibana/pull/183465) --- .../src/request.test.ts | 41 +++++++++++++++++++ .../src/request.ts | 9 ++++ packages/core/http/core-http-server/index.ts | 1 + .../core-http-server/src/http_contract.ts | 8 ++++ .../core-http-server/src/router/request.ts | 11 +++++ packages/kbn-hapi-mocks/src/request.ts | 1 + .../integration_tests/http/request.test.ts | 20 +++++++++ 7 files changed, 91 insertions(+) diff --git a/packages/core/http/core-http-router-server-internal/src/request.test.ts b/packages/core/http/core-http-router-server-internal/src/request.test.ts index 72d81e9ce48e67..f895cb0e2fde75 100644 --- a/packages/core/http/core-http-router-server-internal/src/request.test.ts +++ b/packages/core/http/core-http-router-server-internal/src/request.test.ts @@ -201,6 +201,36 @@ describe('CoreKibanaRequest', () => { }); }); + describe('route.httpVersion property', () => { + it('returns the version from the raw request', () => { + const request = hapiMocks.createRequest({ + raw: { + req: { + httpVersion: '7.4', + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.httpVersion).toEqual('7.4'); + }); + }); + + describe('route.protocol property', () => { + it('return a static value for now as only http1 is supported', () => { + const request = hapiMocks.createRequest({ + raw: { + req: { + httpVersion: '2.0', + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.protocol).toEqual('http1'); + }); + }); + describe('route.options.authRequired property', () => { it('handles required auth: undefined', () => { const auth: RouteOptions['auth'] = undefined; @@ -370,6 +400,17 @@ describe('CoreKibanaRequest', () => { }); }); + describe('httpVersion', () => { + it('should be 1.0', () => { + const request: FakeRawRequest = { + headers: {}, + path: '/', + }; + const kibanaRequest = CoreKibanaRequest.from(request); + expect(kibanaRequest.httpVersion).toEqual('1.0'); + }); + }); + describe('headers', () => { it('returns the correct headers', () => { const request: FakeRawRequest = { 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 450294fb09c0fe..d3274b0a2a1fe0 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 @@ -29,6 +29,7 @@ import { KibanaRequestRouteOptions, RawRequest, FakeRawRequest, + HttpProtocol, } from '@kbn/core-http-server'; import { ELASTIC_INTERNAL_ORIGIN_QUERY_PARAM, @@ -131,6 +132,10 @@ export class CoreKibanaRequest< public readonly isInternalApiRequest: boolean; /** {@inheritDoc KibanaRequest.rewrittenUrl} */ public readonly rewrittenUrl?: URL; + /** {@inheritDoc KibanaRequest.httpVersion} */ + public readonly httpVersion: string; + /** {@inheritDoc KibanaRequest.protocol} */ + public readonly protocol: HttpProtocol; /** @internal */ protected readonly [requestSymbol]!: Request; @@ -167,6 +172,10 @@ export class CoreKibanaRequest< enumerable: false, }); + this.httpVersion = isRealReq ? request.raw.req.httpVersion : '1.0'; + // hardcoded for now as only supporting http1 + this.protocol = 'http1'; + this.route = deepFreeze(this.getRouteInfo(request)); this.socket = isRealReq ? new KibanaSocket(request.raw.req.socket) diff --git a/packages/core/http/core-http-server/index.ts b/packages/core/http/core-http-server/index.ts index 859e6ff8efbd5f..2b288be521d3ad 100644 --- a/packages/core/http/core-http-server/index.ts +++ b/packages/core/http/core-http-server/index.ts @@ -141,6 +141,7 @@ export type { HttpServicePreboot, HttpServiceSetup, HttpServiceStart, + HttpProtocol, } from './src/http_contract'; export type { diff --git a/packages/core/http/core-http-server/src/http_contract.ts b/packages/core/http/core-http-server/src/http_contract.ts index 09250abf8adae6..308ba2dd48785c 100644 --- a/packages/core/http/core-http-server/src/http_contract.ts +++ b/packages/core/http/core-http-server/src/http_contract.ts @@ -402,3 +402,11 @@ export interface HttpServerInfo { /** The protocol used by the server */ protocol: 'http' | 'https' | 'socket'; } + +/** + * Defines an http protocol. + * (Only supporting http1 for now) + * + * - http1: regroups all http/1.x protocols + */ +export type HttpProtocol = 'http1'; diff --git a/packages/core/http/core-http-server/src/router/request.ts b/packages/core/http/core-http-server/src/router/request.ts index e1242dee7eb678..a58c97ccee762c 100644 --- a/packages/core/http/core-http-server/src/router/request.ts +++ b/packages/core/http/core-http-server/src/router/request.ts @@ -10,6 +10,7 @@ import type { URL } from 'url'; import type { RequestApplicationState, RouteOptionsApp } from '@hapi/hapi'; import type { Observable } from 'rxjs'; import type { RecursiveReadonly } from '@kbn/utility-types'; +import type { HttpProtocol } from '../http_contract'; import type { IKibanaSocket } from './socket'; import type { RouteMethod, RouteConfigOptions } from './route'; import type { Headers } from './headers'; @@ -141,6 +142,16 @@ export interface KibanaRequest< */ readonly isInternalApiRequest: boolean; + /** + * The HTTP version sent by the client. + */ + readonly httpVersion: string; + + /** + * The protocol used by the client, inferred from the httpVersion. + */ + readonly protocol: HttpProtocol; + /** * The socket associated with this request. * See {@link IKibanaSocket}. diff --git a/packages/kbn-hapi-mocks/src/request.ts b/packages/kbn-hapi-mocks/src/request.ts index 511e5800719542..4379fcb9aeef00 100644 --- a/packages/kbn-hapi-mocks/src/request.ts +++ b/packages/kbn-hapi-mocks/src/request.ts @@ -39,6 +39,7 @@ export const createRequestMock = (customization: DeepPartial = {}): Req req: { url: path, socket: {}, + httpVersion: '1.1', }, res: { addListener: jest.fn(), diff --git a/src/core/server/integration_tests/http/request.test.ts b/src/core/server/integration_tests/http/request.test.ts index 9e90c1364a9027..e68bc9013ddfa7 100644 --- a/src/core/server/integration_tests/http/request.test.ts +++ b/src/core/server/integration_tests/http/request.test.ts @@ -427,6 +427,7 @@ describe('KibanaRequest', () => { expect(resp3.body).toEqual({ requestId: 'gamma' }); }); }); + describe('request uuid', () => { it('generates a UUID', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); @@ -442,4 +443,23 @@ describe('KibanaRequest', () => { expect(resp1.body.requestUuid).toBe('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'); }); }); + + describe('httpVersion and protocol', () => { + it('returns the correct values', async () => { + const { server: innerServer, createRouter } = await server.setup(setupDeps); + const router = createRouter('/'); + router.get({ path: '/', validate: false }, async (context, req, res) => { + return res.ok({ body: { httpVersion: req.httpVersion, protocol: req.protocol } }); + }); + await server.start(); + + const st = supertest(innerServer.listener); + + const resp1 = await st.get('/').expect(200); + expect(resp1.body).toEqual({ + httpVersion: '1.1', + protocol: 'http1', + }); + }); + }); }); From 29ace6d8ed0f780a5095d5752b06d4d44661c8d8 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Tue, 21 May 2024 14:32:54 +0200 Subject: [PATCH 52/97] [Infra] Add custom dashboard tracking event (#183659) Closes #182859 ## Summary This PR adds a tracking event `Asset Dashboard Loaded` when the custom dashboard is loaded on the dashboards tab. So to understand the usage of the filters we want to track: - when the page loads with the dashboard tab open - If the dashboard filters change or a different dashboard is selected - when the dashboard is initially loaded (and the filters applied) We don't want to track: - If the dashboard is not changed, in case: - Edit action is canceled or the same filters are saved - the same dashboard is selected - switching to a different tab and back to the dashboards tab (showing the same dashboard) ## Testing Go to the asset details flyout/ asset details page and select the dashboards tab - Add a dashboard with a filter ( Check tracking ) ![image](https://github.com/elastic/kibana/assets/14139027/690ba626-714c-4325-8435-d43f5c914f4d) - Add a dashboard without a filter ( Check tracking ) ![image](https://github.com/elastic/kibana/assets/14139027/7f4c009a-3c1b-4301-961d-e6e2407f5e75) - Switch dashboards ( Check tracking ) - Edit a dashboard ( Check tracking ) https://github.com/elastic/kibana/assets/14139027/b43f3e88-25a8-46d4-be88-087917f577db - Should not track: https://github.com/elastic/kibana/assets/14139027/34d93849-fe0d-4643-ac7e-d8de0b74820c --- .../asset_details/__stories__/decorator.tsx | 1 + .../tabs/dashboards/dashboards.tsx | 28 ++++++++++++++++- .../telemetry/telemetry_client.mock.ts | 1 + .../services/telemetry/telemetry_client.ts | 5 ++++ .../services/telemetry/telemetry_events.ts | 30 +++++++++++++++++++ .../telemetry/telemetry_service.test.ts | 24 +++++++++++++++ .../infra/public/services/telemetry/types.ts | 14 ++++++++- 7 files changed, 101 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx index 5d75389d8d8c81..7a7f93a7c57f50 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx @@ -152,6 +152,7 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { telemetry: { reportAssetDetailsFlyoutViewed: () => {}, reportAssetDetailsPageViewed: () => {}, + reportAssetDashboardLoaded: () => {}, }, }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/dashboards/dashboards.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/dashboards/dashboards.tsx index c326015bfebf96..e297c2e6a21915 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/dashboards/dashboards.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/dashboards/dashboards.tsx @@ -32,6 +32,8 @@ import { } from '@kbn/observability-shared-plugin/public'; import { useLocation } from 'react-router-dom'; import { decode } from '@kbn/rison'; +import { isEqual } from 'lodash'; +import type { AssetDashboardLoadedParams } from '../../../../services/telemetry/types'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { buildAssetIdFilter } from '../../../../utils/filters/build'; import type { @@ -56,17 +58,39 @@ export function Dashboards() { const { asset, renderMode } = useAssetDetailsRenderPropsContext(); const location = useLocation(); const { - services: { share }, + services: { share, telemetry }, } = useKibanaContextForPlugin(); const [dashboard, setDashboard] = useState(); const [customDashboards, setCustomDashboards] = useState([]); const [currentDashboard, setCurrentDashboard] = useState(); + const [trackingEventProperties, setTrackingEventProperties] = useState({}); const { data: allAvailableDashboards, status } = useDashboardFetcher(); const { metrics } = useDataViewsContext(); const [urlState, setUrlState] = useAssetDetailsUrlState(); + const trackOnlyOnceTheSameDashboardFilters = React.useRef(false); const { dashboards, loading, reload } = useFetchCustomDashboards({ assetType: asset.type }); + useEffect(() => { + trackOnlyOnceTheSameDashboardFilters.current = false; + if (currentDashboard) { + const currentEventTrackingProperties: AssetDashboardLoadedParams = { + assetType: asset.type, + state: currentDashboard.dashboardFilterAssetIdEnabled, + filtered_by: currentDashboard.dashboardFilterAssetIdEnabled ? ['assetId'] : [], + }; + if (isEqual(trackingEventProperties, currentEventTrackingProperties)) { + trackOnlyOnceTheSameDashboardFilters.current = true; + return; + } + + setTrackingEventProperties(currentEventTrackingProperties); + if (!trackOnlyOnceTheSameDashboardFilters.current) { + telemetry.reportAssetDashboardLoaded(currentEventTrackingProperties); + } + } + }, [asset.type, currentDashboard, telemetry, trackingEventProperties]); + useEffect(() => { const allAvailableDashboardsMap = new Map(); allAvailableDashboards.forEach((availableDashboard) => { @@ -99,9 +123,11 @@ export function Dashboards() { } }, [ allAvailableDashboards, + asset.type, currentDashboard?.dashboardSavedObjectId, dashboards, setUrlState, + telemetry, urlState?.dashboardId, ]); diff --git a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.mock.ts b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.mock.ts index 08a2f9fb9eedb6..50043320b0fd2e 100644 --- a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.mock.ts +++ b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.mock.ts @@ -16,4 +16,5 @@ export const createTelemetryClientMock = (): jest.Mocked => ({ reportAssetDetailsFlyoutViewed: jest.fn(), reportAssetDetailsPageViewed: jest.fn(), reportPerformanceMetricEvent: jest.fn(), + reportAssetDashboardLoaded: jest.fn(), }); diff --git a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts index 2c8cac426635d0..49c606419b7025 100644 --- a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts +++ b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts @@ -8,6 +8,7 @@ import type { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { + AssetDashboardLoadedParams, AssetDetailsFlyoutViewedParams, AssetDetailsPageViewedParams, HostEntryClickedParams, @@ -73,6 +74,10 @@ export class TelemetryClient implements ITelemetryClient { this.analytics.reportEvent(InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED, params); }; + public reportAssetDashboardLoaded = (params: AssetDashboardLoadedParams) => { + this.analytics.reportEvent(InfraTelemetryEventTypes.ASSET_DASHBOARD_LOADED, params); + }; + public reportPerformanceMetricEvent = ( eventName: string, duration: number, diff --git a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_events.ts b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_events.ts index b83cbfe262e637..39b2389e71a443 100644 --- a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_events.ts +++ b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_events.ts @@ -187,6 +187,35 @@ const assetDetailsPageViewed: InfraTelemetryEvent = { }, }; +const assetDashboardLoaded: InfraTelemetryEvent = { + eventType: InfraTelemetryEventTypes.ASSET_DASHBOARD_LOADED, + schema: { + assetType: { + type: 'keyword', + _meta: { + description: 'Asset type for the selected asset.', + optional: false, + }, + }, + state: { + type: 'boolean', + _meta: { + description: 'If the dashboard is filtered or now', + optional: false, + }, + }, + filtered_by: { + type: 'array', + items: { + type: 'text', + _meta: { + description: 'Filters enabled for the dashboard added for an asset', + }, + }, + }, + }, +}; + export const infraTelemetryEvents = [ assetDetailsFlyoutViewed, assetDetailsPageViewed, @@ -195,4 +224,5 @@ export const infraTelemetryEvents = [ hostFlyoutRemoveFilter, hostFlyoutAddFilter, hostViewTotalHostCountRetrieved, + assetDashboardLoaded, ]; diff --git a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts index 3fa8a9b447111e..5862b20863ad59 100644 --- a/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts @@ -237,4 +237,28 @@ describe('TelemetryService', () => { ); }); }); + + describe('#reportAssetDashboardLoaded', () => { + it('should report asset details viewed in full page with properties', async () => { + const setupParams = getSetupParams(); + service.setup(setupParams); + const telemetry = service.start(); + + telemetry.reportAssetDashboardLoaded({ + assetType: 'host', + state: true, + filtered_by: ['assetId'], + }); + + expect(setupParams.analytics.reportEvent).toHaveBeenCalledTimes(1); + expect(setupParams.analytics.reportEvent).toHaveBeenCalledWith( + InfraTelemetryEventTypes.ASSET_DASHBOARD_LOADED, + { + assetType: 'host', + state: true, + filtered_by: ['assetId'], + } + ); + }); + }); }); diff --git a/x-pack/plugins/observability_solution/infra/public/services/telemetry/types.ts b/x-pack/plugins/observability_solution/infra/public/services/telemetry/types.ts index 0556b20af0fb41..16bdb5658f7405 100644 --- a/x-pack/plugins/observability_solution/infra/public/services/telemetry/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/services/telemetry/types.ts @@ -20,6 +20,7 @@ export enum InfraTelemetryEventTypes { HOST_VIEW_TOTAL_HOST_COUNT_RETRIEVED = 'Host View Total Host Count Retrieved', ASSET_DETAILS_FLYOUT_VIEWED = 'Asset Details Flyout Viewed', ASSET_DETAILS_PAGE_VIEWED = 'Asset Details Page Viewed', + ASSET_DASHBOARD_LOADED = 'Asset Dashboard Loaded', } export interface HostsViewQuerySubmittedParams { @@ -53,13 +54,19 @@ export interface AssetDetailsFlyoutViewedParams { export interface AssetDetailsPageViewedParams extends AssetDetailsFlyoutViewedParams { integrations?: string[]; } +export interface AssetDashboardLoadedParams { + state: boolean; + assetType: string; + filtered_by?: string[]; +} export type InfraTelemetryEventParams = | HostsViewQuerySubmittedParams | HostEntryClickedParams | HostFlyoutFilterActionParams | HostsViewQueryHostsCountRetrievedParams - | AssetDetailsFlyoutViewedParams; + | AssetDetailsFlyoutViewedParams + | AssetDashboardLoadedParams; export interface PerformanceMetricInnerEvents { key1?: string; @@ -80,6 +87,7 @@ export interface ITelemetryClient { innerEvents: PerformanceMetricInnerEvents, meta: Record ): void; + reportAssetDashboardLoaded(params: AssetDashboardLoadedParams): void; } export type InfraTelemetryEvent = @@ -110,4 +118,8 @@ export type InfraTelemetryEvent = | { eventType: InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED; schema: RootSchema; + } + | { + eventType: InfraTelemetryEventTypes.ASSET_DASHBOARD_LOADED; + schema: RootSchema; }; From 9168047220ab62418147e4d863e0b754be497a19 Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Tue, 21 May 2024 14:39:22 +0200 Subject: [PATCH 53/97] [Connectors] Fix customized connector marked as beta (#183842) Customized connector should be considered as GA, not BETA. --- .../components/connector_detail/connector_configuration.tsx | 6 +++--- x-pack/plugins/search_connectors/common/connectors.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx index 3f2c7e2978985c..27e620730222b4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx @@ -88,9 +88,9 @@ export const ConnectorConfiguration: React.FC = () => { ({ serviceType }) => serviceType === connector.service_type )?.docsUrl; - const isBeta = - !connector.service_type || - Boolean(BETA_CONNECTORS.find(({ serviceType }) => serviceType === connector.service_type)); + const isBeta = Boolean( + BETA_CONNECTORS.find(({ serviceType }) => serviceType === connector.service_type) + ); return ( <> diff --git a/x-pack/plugins/search_connectors/common/connectors.ts b/x-pack/plugins/search_connectors/common/connectors.ts index dd96c11487279e..647e1b3b6d266b 100644 --- a/x-pack/plugins/search_connectors/common/connectors.ts +++ b/x-pack/plugins/search_connectors/common/connectors.ts @@ -708,7 +708,7 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ } ), iconPath: 'custom.svg', - isBeta: true, + isBeta: false, isNative: false, keywords: ['custom', 'connector', 'code'], name: i18n.translate('searchConnectorsPlugin.content.nativeConnectors.customConnector.name', { From 68becd28dfa4c7d40beabc7941765ba24126e344 Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Tue, 21 May 2024 14:40:56 +0200 Subject: [PATCH 54/97] [Connectors] Update connector stats panels (#183829) --- .../connector_detail/connector_stats.tsx | 158 ++++++++++++------ 1 file changed, 103 insertions(+), 55 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_stats.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_stats.tsx index ec2edf2df0450c..095844b4e04d48 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_stats.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_stats.tsx @@ -10,6 +10,9 @@ import { useValues } from 'kea'; import { EuiBadge, + EuiButtonIcon, + EuiCode, + EuiCopy, EuiFlexGrid, EuiFlexGroup, EuiFlexItem, @@ -21,6 +24,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { Connector, ConnectorStatus, ElasticsearchIndex } from '@kbn/search-connectors'; @@ -127,40 +131,66 @@ export const ConnectorStats: React.FC = ({ connector, index } footer={ - - - - - - + + + -

- {i18n.translate( - 'xpack.enterpriseSearch.connectors.connectorStats.p.DocumentsLabel', - { - defaultMessage: '{documentAmount} Documents', - values: { - documentAmount: indexData?.count ?? 0, - }, - } - )} -

+ {connector.id}, + }} + /> + + + {(copy) => ( + + )} + + - - {seeDocumentsLabel} - + {[ConnectorStatus.CONNECTED, ConnectorStatus.CONFIGURED].includes( + connector.status + ) && connector.index_name ? ( + + {configureLabel} + + ) : ( + + {configureLabel} + + )} } @@ -169,7 +199,7 @@ export const ConnectorStats: React.FC = ({ connector, index = ({ connector, index {connector.index_name} - + + + + + + + {i18n.translate('xpack.enterpriseSearch.content.conectors.indexHealth', { + defaultMessage: 'Healthy', + })} + + + ) : ( @@ -201,33 +242,40 @@ export const ConnectorStats: React.FC = ({ connector, index ) } footer={ - + + + + + + + + +

+ {i18n.translate( + 'xpack.enterpriseSearch.connectors.connectorStats.p.DocumentsLabel', + { + defaultMessage: '{documentAmount} Documents', + values: { + documentAmount: indexData?.count ?? 0, + }, + } + )} +

+
+
+
+
- {[ConnectorStatus.CONNECTED, ConnectorStatus.CONFIGURED].includes( - connector.status - ) && connector.index_name ? ( - - {configureLabel} - - ) : ( - - {configureLabel} - - )} + + {seeDocumentsLabel} +
} From cb127727b420f0a5fd19314b67683b0e045d2f5c Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Tue, 21 May 2024 14:50:21 +0200 Subject: [PATCH 55/97] [Connectors] Removing index name should not remove connector (#183833) In `Search indices` table, if you delete an index with a connector attached to it, it deletes both of them. This was the normally accepted behaviour but with 8.13 we decouple the connector and index. Ideally deleting and index should only delete index and not touch connector attached to it. Similar to the behaviour on `Connectors` table. The connector is not deleted, instead the referenced (deleted) index is detached from connector so that user gets the warning that they need to reconfigure the index once they navigate to connectors overview. We are still removing api keys and connector secrets associated with the deleted index. They need to be regenerated in the connector configuration tab. --- .../kbn-search-connectors/lib/update_connector_index_name.ts | 2 +- .../server/routes/enterprise_search/indices.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/kbn-search-connectors/lib/update_connector_index_name.ts b/packages/kbn-search-connectors/lib/update_connector_index_name.ts index 254a83812c245f..279750390aaca4 100644 --- a/packages/kbn-search-connectors/lib/update_connector_index_name.ts +++ b/packages/kbn-search-connectors/lib/update_connector_index_name.ts @@ -12,7 +12,7 @@ import { ElasticsearchClient } from '@kbn/core/server'; export const updateConnectorIndexName = async ( client: ElasticsearchClient, connectorId: string, - indexName: string + indexName: string | null ): Promise => { return await client.transport.request({ method: 'PUT', diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index eabd377a43f13b..1d240df3d9cf99 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -14,7 +14,7 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; -import { deleteConnectorById, deleteConnectorSecret } from '@kbn/search-connectors'; +import { deleteConnectorSecret, updateConnectorIndexName } from '@kbn/search-connectors'; import { fetchConnectorByIndexName, fetchConnectors, @@ -207,7 +207,8 @@ export function registerIndexRoutes({ } if (connector) { - await deleteConnectorById(client.asCurrentUser, connector.id); + // detach the deleted index without removing the connector + await updateConnectorIndexName(client.asCurrentUser, connector.id, null); if (connector.api_key_id) { await client.asCurrentUser.security.invalidateApiKey({ ids: [connector.api_key_id] }); } From 4d8dd62513b1ea838001edc6df9ba887bdfe10cf Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Tue, 21 May 2024 14:55:24 +0200 Subject: [PATCH 56/97] [Infra] Add infra custom dashboards feature flag to infra settings page (#183486) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #180386 ⚠️ To be merged after [#182859](https://github.com/elastic/kibana/issues/182859) is done ## Summary This PR enables custom dashboards by default and adds the flag to infra settings: image ## Testing - Go to infra settings page and check if the custom dashboards flag is enabled - Go to the hosts view and select a host: the dashboards tab should be visible - Compare the flags with advanced settings - Disable the flag, go to the hosts view and select a host: the dashboards tab should not be visible - Enable the flag, go to the hosts view and select a host: the dashboards tab should be visible https://github.com/elastic/kibana/assets/14139027/f788c019-4fdb-416b-8fdb-b5cb39b8a2fc --- .../metrics/settings/features_configuration_panel.tsx | 7 +++++++ .../metrics/settings/source_configuration_settings.tsx | 2 ++ .../observability/server/ui_settings.ts | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx index f0d7e9d4872775..d8df6ef8b39fa6 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx @@ -13,6 +13,7 @@ import React from 'react'; import { enableInfrastructureHostsView, enableInfrastructureProfilingIntegration, + enableInfrastructureAssetCustomDashboards, enableInfrastructureContainerAssetView, } from '@kbn/observability-plugin/common'; import { useEditableSettings } from '@kbn/observability-shared-plugin/public'; @@ -76,6 +77,12 @@ export function FeaturesConfigurationPanel({ onFieldChange={handleFieldChange} unsavedChange={unsavedChanges[enableInfrastructureHostsView]} /> + {featureFlags.profilingEnabled && ( = { name: i18n.translate('xpack.observability.enableInfrastructureAssetCustomDashboards', { defaultMessage: 'Custom dashboards for asset details in Infrastructure', }), - value: false, + value: true, description: i18n.translate( 'xpack.observability.enableInfrastructureAssetCustomDashboardsDescription', { From c08a286861b4e4634b9dab5a1438e1b2ecf4828f Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 21 May 2024 14:44:45 +0100 Subject: [PATCH 57/97] skip flaky suite (#139762) --- test/functional/apps/dashboard/group3/dashboard_state.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/dashboard/group3/dashboard_state.ts b/test/functional/apps/dashboard/group3/dashboard_state.ts index d5d522a7384815..423adf781835c7 100644 --- a/test/functional/apps/dashboard/group3/dashboard_state.ts +++ b/test/functional/apps/dashboard/group3/dashboard_state.ts @@ -185,7 +185,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboard.waitForRenderComplete(); }; - describe('Directly modifying url updates dashboard state', () => { + // FLAKY: https://github.com/elastic/kibana/issues/139762 + describe.skip('Directly modifying url updates dashboard state', () => { before(async () => { await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); From afc3c7863097c11056ea9e27f04dc0d20629c82b Mon Sep 17 00:00:00 2001 From: Joe McElroy Date: Tue, 21 May 2024 15:05:54 +0100 Subject: [PATCH 58/97] [Search] [Playground] Resolve NPE when parent elements in the path are not defined (#183902) ## Summary Issue occurs when the field path used is undefined in any of the parents. Switching to get which handles these cases gracefully. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../get_value_for_selected_field.test.ts | 21 +++++++++++++++++-- .../utils/get_value_for_selected_field.ts | 7 ++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts index fb52b6145ea1c5..a13e51603cc7b6 100644 --- a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts +++ b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts @@ -44,7 +44,7 @@ describe('getValueForSelectedField', () => { ); }); - test('should return undefined for missing key', () => { + test('should return empty string for missing key', () => { const hit = { _index: 'sample-index', _id: '8jSNY48B6iHEi98DL1C-', @@ -58,6 +58,23 @@ describe('getValueForSelectedField', () => { }, }; - expect(getValueForSelectedField(hit._source, 'metadata.sources')).toBeUndefined(); + expect(getValueForSelectedField(hit._source, 'metadata.sources')).toBe(''); + }); + + test('should return empty string for nested key', () => { + const hit = { + _index: 'sample-index', + _id: '8jSNY48B6iHEi98DL1C-', + _score: 0.7789394, + _source: { + test: 'The Shawshank Redemption', + metadata: { + source: + 'Over the course of several years, two convicts form a friendship, seeking consolation and, eventually, redemption through basic compassion', + }, + }, + }; + + expect(getValueForSelectedField(hit._source, 'bla.sources')).toBe(''); }); }); diff --git a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts index 6aab9cafb387a8..6a2044f2943e45 100644 --- a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts +++ b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts @@ -5,7 +5,8 @@ * 2.0. */ -// @ts-ignore -export const getValueForSelectedField = (source, path: string): string => { - return path.split('.').reduce((acc, key) => acc[key], source); +import { get } from 'lodash'; + +export const getValueForSelectedField = (source: unknown, path: string): string => { + return get(source, path, ''); }; From ba770bdfe14d4ff1894edc43231df3cadb0c68dd Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Tue, 21 May 2024 16:26:01 +0200 Subject: [PATCH 59/97] [kbn-test] improve error handling for saml auth (#182511) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary If cloud user has no access to the project, we get error message like `Error: Failed to parse SAML response value`. This error does not explain the issue and especially because request returns 200 OK (due to redirects) This PR disables redirects for API call that creates SAML response, so if user has no access to the project response code is 303. To better explain the issue extended message is logged: ``` Error: Failed to parse SAML response value. │ Most likely the user has no access to the cloud deployment. │ Login to with the user from '.ftr/role_users.json' file and try to load | in the same window. ``` The PR also adds test coverage for the SAML auth in Cloud, to make sure we don't break stuff with new changes --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-test/src/auth/helper.ts | 30 +++ packages/kbn-test/src/auth/saml_auth.test.ts | 197 ++++++++++++++++++ packages/kbn-test/src/auth/saml_auth.ts | 88 +++++--- .../kbn-test/src/auth/sesson_manager.test.ts | 51 +++-- packages/kbn-test/src/auth/types.ts | 8 + 5 files changed, 333 insertions(+), 41 deletions(-) create mode 100644 packages/kbn-test/src/auth/saml_auth.test.ts diff --git a/packages/kbn-test/src/auth/helper.ts b/packages/kbn-test/src/auth/helper.ts index d13e3ef69f37ba..fc32eab773c8eb 100644 --- a/packages/kbn-test/src/auth/helper.ts +++ b/packages/kbn-test/src/auth/helper.ts @@ -20,3 +20,33 @@ export const readCloudUsersFromFile = (filePath: string): Array<[Role, User]> => return Object.entries(JSON.parse(data)) as Array<[Role, User]>; }; + +export const isValidUrl = (value: string) => { + try { + const url = new URL(value); + return url.protocol === 'http:' || url.protocol === 'https:'; + } catch (err) { + return false; + } +}; + +export const isValidHostname = (value: string) => { + if (value.length === 0) { + return false; + } + + const validChars = /^[a-zA-Z0-9-.]{1,253}\.?$/g; + if (!validChars.test(value)) { + return false; + } + + if (value.endsWith('.')) { + value = value.slice(0, value.length - 1); + } + + if (value.length > 253) { + return false; + } + + return true; +}; diff --git a/packages/kbn-test/src/auth/saml_auth.test.ts b/packages/kbn-test/src/auth/saml_auth.test.ts new file mode 100644 index 00000000000000..e64f18023a6762 --- /dev/null +++ b/packages/kbn-test/src/auth/saml_auth.test.ts @@ -0,0 +1,197 @@ +/* + * 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 { ToolingLog } from '@kbn/tooling-log'; +import axios, { AxiosRequestConfig } from 'axios'; + +jest.mock('axios'); +import { + createCloudSession, + createSAMLRequest, + createSAMLResponse, + finishSAMLHandshake, +} from './saml_auth'; + +const axiosRequestMock = jest.spyOn(axios, 'request'); +const axiosGetMock = jest.spyOn(axios, 'get'); + +const log = new ToolingLog(); + +const mockRequestOnce = (mockedPath: string, response: any) => { + axiosRequestMock.mockImplementationOnce((config: AxiosRequestConfig) => { + if (config.url?.endsWith(mockedPath)) { + return Promise.resolve(response); + } + return Promise.reject(new Error(`Unexpected URL: ${config.url}`)); + }); +}; + +const mockGetOnce = (mockedUrl: string, response: any) => { + axiosGetMock.mockImplementationOnce((url: string) => { + if (url === mockedUrl) { + return Promise.resolve(response); + } + return Promise.reject(new Error(`Unexpected URL`)); + }); +}; + +describe('saml_auth', () => { + describe('createCloudSession', () => { + test('returns token value', async () => { + mockRequestOnce('/api/v1/saas/auth/_login', { data: { token: 'mocked_token' } }); + + const sessionToken = await createCloudSession({ + hostname: 'cloud', + email: 'viewer@elastic.co', + password: 'changeme', + log, + }); + expect(sessionToken).toBe('mocked_token'); + }); + + test('throws error when response has no token', async () => { + mockRequestOnce('/api/v1/saas/auth/_login', { data: { message: 'no token' } }); + + await expect( + createCloudSession({ + hostname: 'cloud', + email: 'viewer@elastic.co', + password: 'changeme', + log, + }) + ).rejects.toThrow('Unable to create Cloud session, token is missing.'); + }); + }); + + describe('createSAMLRequest', () => { + test('returns { location, sid }', async () => { + mockRequestOnce('/internal/security/login', { + data: { + location: 'https://cloud.test/saml?SAMLRequest=fVLLbtswEPwVgXe9K6%2F', + }, + headers: { + 'set-cookie': [`sid=Fe26.2**1234567890; Secure; HttpOnly; Path=/`], + }, + }); + + const response = await createSAMLRequest('https://kbn.test.co', '8.12.0', log); + expect(response).toStrictEqual({ + location: 'https://cloud.test/saml?SAMLRequest=fVLLbtswEPwVgXe9K6%2F', + sid: 'Fe26.2**1234567890', + }); + }); + + test(`throws error when response has no 'set-cookie' header`, async () => { + mockRequestOnce('/internal/security/login', { + data: { + location: 'https://cloud.test/saml?SAMLRequest=fVLLbtswEPwVgXe9K6%2F', + }, + headers: {}, + }); + + expect(createSAMLRequest('https://kbn.test.co', '8.12.0', log)).rejects.toThrow( + `Failed to parse 'set-cookie' header` + ); + }); + + test('throws error when location is not a valid url', async () => { + mockRequestOnce('/internal/security/login', { + data: { + location: 'http/.test', + }, + headers: { + 'set-cookie': [`sid=Fe26.2**1234567890; Secure; HttpOnly; Path=/`], + }, + }); + + expect(createSAMLRequest('https://kbn.test.co', '8.12.0', log)).rejects.toThrow( + `Location from Kibana SAML request is not a valid url: http/.test` + ); + }); + + test('throws error when response has no location', async () => { + const data = { error: 'mocked error' }; + mockRequestOnce('/internal/security/login', { + data, + headers: { + 'set-cookie': [`sid=Fe26.2**1234567890; Secure; HttpOnly; Path=/`], + }, + }); + + expect(createSAMLRequest('https://kbn.test.co', '8.12.0', log)).rejects.toThrow( + `Failed to get location from SAML response data: ${JSON.stringify(data)}` + ); + }); + }); + + describe('createSAMLResponse', () => { + const location = 'https://cloud.test/saml?SAMLRequest=fVLLbtswEPwVgXe9K6%2F'; + const createSAMLResponseParams = { + location, + ecSession: 'mocked_token', + email: 'viewer@elastic.co', + kbnHost: 'https://kbn.test.co', + log, + }; + + test('returns valid saml response', async () => { + mockGetOnce(location, { + data: `Test`, + }); + + const actualResponse = await createSAMLResponse(createSAMLResponseParams); + expect(actualResponse).toBe('PD94bWluc2U+'); + }); + + test('throws error when failed to parse SAML response value', async () => { + mockGetOnce(location, { + data: `Test`, + }); + + await expect(createSAMLResponse(createSAMLResponseParams)).rejects + .toThrowError(`Failed to parse SAML response value.\nMost likely the 'viewer@elastic.co' user has no access to the cloud deployment. +Login to ${ + new URL(location).hostname + } with the user from '.ftr/role_users.json' file and try to load +https://kbn.test.co in the same window.`); + }); + }); + + describe('finishSAMLHandshake', () => { + const cookieStr = 'mocked_cookie'; + test('returns valid cookie', async () => { + mockRequestOnce('/api/security/saml/callback', { + headers: { + 'set-cookie': [`sid=${cookieStr}; Secure; HttpOnly; Path=/`], + }, + }); + + const response = await finishSAMLHandshake({ + kbnHost: 'https://kbn.test.co', + samlResponse: 'PD94bWluc2U+', + sid: 'Fe26.2**1234567890', + log, + }); + expect(response.key).toEqual('sid'); + expect(response.value).toEqual(cookieStr); + }); + + test(`throws error when response has no 'set-cookie' header`, async () => { + mockRequestOnce('/api/security/saml/callback', { headers: {} }); + + await expect( + finishSAMLHandshake({ + kbnHost: 'https://kbn.test.co', + samlResponse: 'PD94bWluc2U+', + sid: 'Fe26.2**1234567890', + log, + }) + ).rejects.toThrow(`Failed to parse 'set-cookie' header`); + }); + }); +}); diff --git a/packages/kbn-test/src/auth/saml_auth.ts b/packages/kbn-test/src/auth/saml_auth.ts index bd570188922e64..a88d11c6a5bc90 100644 --- a/packages/kbn-test/src/auth/saml_auth.ts +++ b/packages/kbn-test/src/auth/saml_auth.ts @@ -12,10 +12,12 @@ import axios, { AxiosResponse } from 'axios'; import * as cheerio from 'cheerio'; import { Cookie, parse as parseCookie } from 'tough-cookie'; import Url from 'url'; +import { isValidHostname, isValidUrl } from './helper'; import { CloudSamlSessionParams, CreateSamlSessionParams, LocalSamlSessionParams, + SAMLResponseValueParams, UserProfile, } from './types'; @@ -50,13 +52,23 @@ const cleanException = (url: string, ex: any) => { } }; -const getSessionCookie = (cookieString: string) => { - return parseCookie(cookieString); +const getCookieFromResponseHeaders = (response: AxiosResponse, errorMessage: string) => { + const setCookieHeader = response?.headers['set-cookie']; + if (!setCookieHeader) { + throw new Error(`Failed to parse 'set-cookie' header`); + } + + const cookie = parseCookie(setCookieHeader![0]); + if (!cookie) { + throw new Error(errorMessage); + } + + return cookie; }; const getCloudHostName = () => { const hostname = process.env.TEST_CLOUD_HOST_NAME; - if (!hostname) { + if (!hostname || !isValidHostname(hostname)) { throw new Error('SAML Authentication requires TEST_CLOUD_HOST_NAME env variable to be set'); } @@ -71,7 +83,7 @@ const getCloudUrl = (hostname: string, pathname: string) => { }); }; -const createCloudSession = async (params: CreateSamlSessionParams) => { +export const createCloudSession = async (params: CreateSamlSessionParams) => { const { hostname, email, password, log } = params; const cloudLoginUrl = getCloudUrl(hostname, '/api/v1/saas/auth/_login'); let sessionResponse: AxiosResponse | undefined; @@ -112,7 +124,7 @@ const createCloudSession = async (params: CreateSamlSessionParams) => { return token; }; -const createSAMLRequest = async (kbnUrl: string, kbnVersion: string, log: ToolingLog) => { +export const createSAMLRequest = async (kbnUrl: string, kbnVersion: string, log: ToolingLog) => { let samlResponse: AxiosResponse; const url = kbnUrl + '/internal/security/login'; try { @@ -138,10 +150,10 @@ const createSAMLRequest = async (kbnUrl: string, kbnVersion: string, log: Toolin throw ex; } - const cookie = getSessionCookie(samlResponse.headers['set-cookie']![0]); - if (!cookie) { - throw new Error(`Failed to parse cookie from SAML response headers`); - } + const cookie = getCookieFromResponseHeaders( + samlResponse, + 'Failed to parse cookie from SAML response headers' + ); const location = samlResponse?.data?.location as string; if (!location) { @@ -149,24 +161,46 @@ const createSAMLRequest = async (kbnUrl: string, kbnVersion: string, log: Toolin `Failed to get location from SAML response data: ${JSON.stringify(samlResponse.data)}` ); } + if (!isValidUrl(location)) { + throw new Error(`Location from Kibana SAML request is not a valid url: ${location}`); + } return { location, sid: cookie.value }; }; -const createSAMLResponse = async (url: string, ecSession: string) => { - const samlResponse = await axios.get(url, { - headers: { - Cookie: `ec_session=${ecSession}`, - }, - }); - const $ = cheerio.load(samlResponse.data); - const value = $('input').attr('value') ?? ''; - if (value.length === 0) { - throw new Error('Failed to parse SAML response value'); +export const createSAMLResponse = async (params: SAMLResponseValueParams) => { + const { location, ecSession, email, kbnHost, log } = params; + let samlResponse: AxiosResponse; + let value: string | undefined; + try { + samlResponse = await axios.get(location, { + headers: { + Cookie: `ec_session=${ecSession}`, + }, + maxRedirects: 0, + }); + const $ = cheerio.load(samlResponse.data); + value = $('input').attr('value'); + } catch (err) { + if (err.isAxiosError) { + log.error( + `Create SAML Response failed with status code ${err?.response?.status}: ${err?.response?.data}` + ); + } } + + if (!value) { + const hostname = new URL(location).hostname; + throw new Error( + `Failed to parse SAML response value.\nMost likely the '${email}' user has no access to the cloud deployment. +Login to ${hostname} with the user from '.ftr/role_users.json' file and try to load +${kbnHost} in the same window.` + ); + } + return value; }; -const finishSAMLHandshake = async ({ +export const finishSAMLHandshake = async ({ kbnHost, samlResponse, sid, @@ -199,12 +233,10 @@ const finishSAMLHandshake = async ({ throw ex; } - const cookie = getSessionCookie(authResponse!.headers['set-cookie']![0]); - if (!cookie) { - throw new Error(`Failed to get cookie from SAML callback response headers`); - } - - return cookie; + return getCookieFromResponseHeaders( + authResponse, + 'Failed to get cookie from SAML callback response headers' + ); }; const getSecurityProfile = async ({ @@ -238,9 +270,9 @@ const getSecurityProfile = async ({ export const createCloudSAMLSession = async (params: CloudSamlSessionParams) => { const { email, password, kbnHost, kbnVersion, log } = params; const hostname = getCloudHostName(); - const token = await createCloudSession({ hostname, email, password, log }); + const ecSession = await createCloudSession({ hostname, email, password, log }); const { location, sid } = await createSAMLRequest(kbnHost, kbnVersion, log); - const samlResponse = await createSAMLResponse(location, token); + const samlResponse = await createSAMLResponse({ location, ecSession, email, kbnHost, log }); const cookie = await finishSAMLHandshake({ kbnHost, samlResponse, sid, log }); const userProfile = await getSecurityProfile({ kbnHost, cookie, log }); return new Session(cookie, email, userProfile.full_name); diff --git a/packages/kbn-test/src/auth/sesson_manager.test.ts b/packages/kbn-test/src/auth/sesson_manager.test.ts index 4332a3630bfe95..f0679917654a0d 100644 --- a/packages/kbn-test/src/auth/sesson_manager.test.ts +++ b/packages/kbn-test/src/auth/sesson_manager.test.ts @@ -24,6 +24,7 @@ const roleEditor = 'editor'; const createLocalSAMLSessionMock = jest.spyOn(samlAuth, 'createLocalSAMLSession'); const createCloudSAMLSessionMock = jest.spyOn(samlAuth, 'createCloudSAMLSession'); const readCloudUsersFromFileMock = jest.spyOn(helper, 'readCloudUsersFromFile'); +const isValidHostnameMock = jest.spyOn(helper, 'isValidHostname'); jest.mock('../kbn_client/kbn_client', () => { return { @@ -130,19 +131,6 @@ describe('SamlSessionManager', () => { }); describe('for cloud session', () => { - beforeEach(() => { - jest.resetAllMocks(); - jest - .requireMock('../kbn_client/kbn_client') - .KbnClient.mockImplementation(() => ({ version: { get } })); - get.mockImplementationOnce(() => Promise.resolve('8.12.0')); - - createCloudSAMLSessionMock.mockResolvedValue( - new Session(cloudCookieInstance, cloudEmail, cloudFullname) - ); - readCloudUsersFromFileMock.mockReturnValue(cloudUsers); - }); - const hostOptions = { protocol: 'https' as 'http' | 'https', hostname: 'cloud', @@ -165,6 +153,43 @@ describe('SamlSessionManager', () => { cloudUsers.push(['viewer', { email: 'viewer@elastic.co', password: 'p1234' }]); cloudUsers.push(['editor', { email: 'editor@elastic.co', password: 'p1234' }]); + describe('handles errors', () => { + beforeEach(() => { + jest.resetAllMocks(); + jest + .requireMock('../kbn_client/kbn_client') + .KbnClient.mockImplementation(() => ({ version: { get } })); + get.mockImplementationOnce(() => Promise.resolve('8.12.0')); + + readCloudUsersFromFileMock.mockReturnValue(cloudUsers); + }); + + test('should throw error if TEST_CLOUD_HOST_NAME is not set', async () => { + isValidHostnameMock.mockReturnValueOnce(false); + const samlSessionManager = new SamlSessionManager({ + hostOptions, + log, + isCloud, + }); + await expect(samlSessionManager.getSessionCookieForRole(roleViewer)).rejects.toThrow( + 'SAML Authentication requires TEST_CLOUD_HOST_NAME env variable to be set' + ); + }); + }); + + beforeEach(() => { + jest.resetAllMocks(); + jest + .requireMock('../kbn_client/kbn_client') + .KbnClient.mockImplementation(() => ({ version: { get } })); + get.mockImplementationOnce(() => Promise.resolve('8.12.0')); + + createCloudSAMLSessionMock.mockResolvedValue( + new Session(cloudCookieInstance, cloudEmail, cloudFullname) + ); + readCloudUsersFromFileMock.mockReturnValue(cloudUsers); + }); + test('should create an instance of SamlSessionManager', () => { const samlSessionManager = new SamlSessionManager({ hostOptions, diff --git a/packages/kbn-test/src/auth/types.ts b/packages/kbn-test/src/auth/types.ts index 17b5183ab99675..62ee5ac4289348 100644 --- a/packages/kbn-test/src/auth/types.ts +++ b/packages/kbn-test/src/auth/types.ts @@ -32,6 +32,14 @@ export interface CreateSamlSessionParams { log: ToolingLog; } +export interface SAMLResponseValueParams { + location: string; + ecSession: string; + email: string; + kbnHost: string; + log: ToolingLog; +} + export interface User { readonly email: string; readonly password: string; From 2c9a89e92116f9d07d489ba2cc241a64767608b7 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Tue, 21 May 2024 07:39:36 -0700 Subject: [PATCH 60/97] [HTTP/OAS] Add description in create rule request body (#183564) --- .../routes/rule/apis/create/schemas/v1.ts | 204 ++++++++++++++---- .../common/routes/rule/response/schemas/v1.ts | 24 ++- 2 files changed, 178 insertions(+), 50 deletions(-) diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/create/schemas/v1.ts b/x-pack/plugins/alerting/common/routes/rule/apis/create/schemas/v1.ts index 40dd30249c09d6..cb24fe674b8995 100644 --- a/x-pack/plugins/alerting/common/routes/rule/apis/create/schemas/v1.ts +++ b/x-pack/plugins/alerting/common/routes/rule/apis/create/schemas/v1.ts @@ -11,60 +11,172 @@ import { notifyWhenSchemaV1, alertDelaySchemaV1 } from '../../../response'; import { alertsFilterQuerySchemaV1 } from '../../../../alerts_filter_query'; export const actionFrequencySchema = schema.object({ - summary: schema.boolean(), + summary: schema.boolean({ + meta: { description: 'Indicates whether the action is a summary.' }, + }), notify_when: notifyWhenSchemaV1, - throttle: schema.nullable(schema.string({ validate: validateDurationV1 })), -}); - -export const actionAlertsFilterSchema = schema.object({ - query: schema.maybe(alertsFilterQuerySchemaV1), - timeframe: schema.maybe( - schema.object({ - days: schema.arrayOf( - schema.oneOf([ - schema.literal(1), - schema.literal(2), - schema.literal(3), - schema.literal(4), - schema.literal(5), - schema.literal(6), - schema.literal(7), - ]) - ), - hours: schema.object({ - start: schema.string({ - validate: validateHoursV1, - }), - end: schema.string({ - validate: validateHoursV1, - }), - }), - timezone: schema.string({ validate: validateTimezoneV1 }), + throttle: schema.nullable( + schema.string({ + validate: validateDurationV1, + meta: { + description: + 'The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.', + }, }) ), }); -export const actionSchema = schema.object({ - group: schema.maybe(schema.string()), - id: schema.string(), - params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { defaultValue: {} }), - frequency: schema.maybe(actionFrequencySchema), - uuid: schema.maybe(schema.string()), - alerts_filter: schema.maybe(actionAlertsFilterSchema), - use_alert_data_for_template: schema.maybe(schema.boolean()), -}); +export const actionAlertsFilterSchema = schema.object( + { + query: schema.maybe(alertsFilterQuerySchemaV1), + timeframe: schema.maybe( + schema.object( + { + days: schema.arrayOf( + schema.oneOf([ + schema.literal(1), + schema.literal(2), + schema.literal(3), + schema.literal(4), + schema.literal(5), + schema.literal(6), + schema.literal(7), + ]), + { + meta: { + description: + 'Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.', + }, + } + ), + hours: schema.object( + { + start: schema.string({ + validate: validateHoursV1, + meta: { description: 'The start of the time frame in 24-hour notation (`hh:mm`).' }, + }), + end: schema.string({ + validate: validateHoursV1, + meta: { description: 'The end of the time frame in 24-hour notation (`hh:mm`).' }, + }), + }, + { + meta: { + description: + 'Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.', + }, + } + ), + timezone: schema.string({ + validate: validateTimezoneV1, + meta: { + description: + 'The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.', + }, + }), + }, + { meta: { description: 'Defines a period that limits whether the action runs.' } } + ) + ), + }, + { + meta: { + description: + 'Conditions that affect whether the action runs. If you specify multiple conditions, all conditions must be met for the action to run. For example, if an alert occurs within the specified time frame and matches the query, the action runs.', + }, + } +); + +export const actionSchema = schema.object( + { + group: schema.maybe( + schema.string({ + meta: { + description: + "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + }, + }) + ), + id: schema.string({ + meta: { description: 'The identifier for the connector saved object.' }, + }), + params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { + defaultValue: {}, + meta: { + description: + 'The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.', + }, + }), + frequency: schema.maybe(actionFrequencySchema), + uuid: schema.maybe( + schema.string({ + meta: { description: 'A universally unique identifier (UUID) for the action.' }, + }) + ), + alerts_filter: schema.maybe(actionAlertsFilterSchema), + use_alert_data_for_template: schema.maybe(schema.boolean()), + }, + { + meta: { description: 'An action that runs under defined conditions.' }, + } +); export const createBodySchema = schema.object({ - name: schema.string(), - rule_type_id: schema.string(), - enabled: schema.boolean({ defaultValue: true }), - consumer: schema.string(), - tags: schema.arrayOf(schema.string(), { defaultValue: [] }), - throttle: schema.maybe(schema.nullable(schema.string({ validate: validateDurationV1 }))), - params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { defaultValue: {} }), - schedule: schema.object({ - interval: schema.string({ validate: validateDurationV1 }), + name: schema.string({ + meta: { + description: + 'The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.', + }, + }), + rule_type_id: schema.string({ + meta: { description: 'The rule type identifier.' }, }), + enabled: schema.boolean({ + defaultValue: true, + meta: { + description: + 'Indicates whether you want to run the rule on an interval basis after it is created.', + }, + }), + consumer: schema.string({ + meta: { + description: + 'The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.', + }, + }), + tags: schema.arrayOf(schema.string(), { + defaultValue: [], + meta: { description: 'The tags for the rule.' }, + }), + throttle: schema.maybe( + schema.nullable( + schema.string({ + validate: validateDurationV1, + meta: { + description: + 'Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.', + }, + }) + ) + ), + params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { + defaultValue: {}, + meta: { description: 'The parameters for the rule.' }, + }), + schedule: schema.object( + { + interval: schema.string({ + validate: validateDurationV1, + meta: { description: 'The interval is specified in seconds, minutes, hours, or days.' }, + }), + }, + { + meta: { + description: + 'The check interval, which specifies how frequently the rule conditions are checked.', + }, + } + ), actions: schema.arrayOf(actionSchema, { defaultValue: [] }), notify_when: schema.maybe(schema.nullable(notifyWhenSchemaV1)), alert_delay: schema.maybe(alertDelaySchemaV1), diff --git a/x-pack/plugins/alerting/common/routes/rule/response/schemas/v1.ts b/x-pack/plugins/alerting/common/routes/rule/response/schemas/v1.ts index 2b6f09ef0dfd86..e78c9b88b5d64a 100644 --- a/x-pack/plugins/alerting/common/routes/rule/response/schemas/v1.ts +++ b/x-pack/plugins/alerting/common/routes/rule/response/schemas/v1.ts @@ -27,7 +27,13 @@ export const notifyWhenSchema = schema.oneOf( schema.literal(ruleNotifyWhenV1.ACTIVE), schema.literal(ruleNotifyWhenV1.THROTTLE), ], - { validate: validateNotifyWhenV1 } + { + validate: validateNotifyWhenV1, + meta: { + description: + 'Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.', + }, + } ); const intervalScheduleSchema = schema.object({ @@ -183,9 +189,19 @@ export const ruleSnoozeScheduleSchema = schema.object({ skipRecurrences: schema.maybe(schema.arrayOf(schema.string())), }); -export const alertDelaySchema = schema.object({ - active: schema.number(), -}); +export const alertDelaySchema = schema.object( + { + active: schema.number({ + meta: { description: 'The number of consecutive runs that must meet the rule conditions.' }, + }), + }, + { + meta: { + description: + 'Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.', + }, + } +); export const ruleResponseSchema = schema.object({ id: schema.string(), From db316ad4752871543b3929a8bcf976c2963df93c Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 21 May 2024 17:11:20 +0200 Subject: [PATCH 61/97] [http] explicitly create the server listener (#183591) ## Summary Related to https://github.com/elastic/kibana/issues/7104 Adapted from https://github.com/elastic/kibana/pull/183465 For `http2` support, we will have to change the way we configure the HAPI server to manually provide the listener instead of passing down the options for HAPI to create it. This PR prepares that work, by creating the `http` or `https` (`tls`) listener and passing it when creating the HAPI server instead of just passing the `tls` options. **Note:** no integration tests were added, because we already have the right coverage for both tls and non-tls mode, so any change of behavior introduced by the PR should be detectable by them. --- .../src/http_server.ts | 12 +- .../src/https_redirect_server.ts | 13 +- .../src/base_path_proxy_server.ts | 5 +- .../base_path_proxy_server.test.ts | 13 +- .../src/server/server.test.mocks.ts | 4 +- .../src/server/server.test.ts | 4 - .../src/server/server.ts | 4 +- packages/kbn-server-http-tools/index.ts | 5 +- .../src/create_server.ts | 20 +-- .../src/get_listener.test.mocks.ts | 47 ++++++ .../src/get_listener.test.ts | 139 ++++++++++++++++++ .../kbn-server-http-tools/src/get_listener.ts | 54 +++++++ ...ns.ts => get_server_options.test.mocks.ts} | 16 +- .../src/get_server_options.test.ts | 86 ++++------- .../src/get_server_options.ts | 36 +---- .../src/get_tls_options.test.ts | 110 ++++++++++++++ .../src/get_tls_options.ts | 32 ++++ .../src/set_tls_config.test.mocks.ts | 4 +- .../src/set_tls_config.ts | 9 +- packages/kbn-server-http-tools/src/types.ts | 10 ++ .../http/set_tls_config.test.ts | 10 +- 21 files changed, 463 insertions(+), 170 deletions(-) create mode 100644 packages/kbn-server-http-tools/src/get_listener.test.mocks.ts create mode 100644 packages/kbn-server-http-tools/src/get_listener.test.ts create mode 100644 packages/kbn-server-http-tools/src/get_listener.ts rename packages/kbn-server-http-tools/src/{get_listener_options.ts => get_server_options.test.mocks.ts} (55%) create mode 100644 packages/kbn-server-http-tools/src/get_tls_options.test.ts create mode 100644 packages/kbn-server-http-tools/src/get_tls_options.ts 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 236b9567ddcb70..478d1d746bbac4 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 @@ -10,14 +10,7 @@ import { Server, Request } from '@hapi/hapi'; import HapiStaticFiles from '@hapi/inert'; import url from 'url'; import { v4 as uuidv4 } from 'uuid'; -import { - createServer, - getListenerOptions, - getServerOptions, - setTlsConfig, - getRequestId, -} from '@kbn/server-http-tools'; - +import { createServer, getServerOptions, setTlsConfig, getRequestId } from '@kbn/server-http-tools'; import type { Duration } from 'moment'; import { Observable, Subscription, firstValueFrom, pairwise, take } from 'rxjs'; import apm from 'elastic-apm-node'; @@ -235,9 +228,8 @@ export class HttpServer { this.config = config; const serverOptions = getServerOptions(config); - const listenerOptions = getListenerOptions(config); - this.server = createServer(serverOptions, listenerOptions); + this.server = createServer(serverOptions); await this.server.register([HapiStaticFiles]); if (config.compression.brotli.enabled) { await this.server.register({ diff --git a/packages/core/http/core-http-server-internal/src/https_redirect_server.ts b/packages/core/http/core-http-server-internal/src/https_redirect_server.ts index 501c83377fe0a4..2999c4aaf734e2 100644 --- a/packages/core/http/core-http-server-internal/src/https_redirect_server.ts +++ b/packages/core/http/core-http-server-internal/src/https_redirect_server.ts @@ -8,7 +8,7 @@ import { Request, ResponseToolkit, Server } from '@hapi/hapi'; import { format as formatUrl } from 'url'; -import { createServer, getListenerOptions, getServerOptions } from '@kbn/server-http-tools'; +import { createServer, getServerOptions } from '@kbn/server-http-tools'; import type { Logger } from '@kbn/logging'; import { HttpConfig } from './http_config'; @@ -31,13 +31,10 @@ export class HttpsRedirectServer { // Redirect server is configured in the same way as any other HTTP server // within the platform with the only exception that it should always be a // plain HTTP server, so we just ignore `tls` part of options. - this.server = createServer( - { - ...getServerOptions(config, { configureTLS: false }), - port: config.ssl.redirectHttpFromPort, - }, - getListenerOptions(config) - ); + this.server = createServer({ + ...getServerOptions(config, { configureTLS: false }), + port: config.ssl.redirectHttpFromPort, + }); this.server.ext('onRequest', (request: Request, responseToolkit: ResponseToolkit) => { return responseToolkit diff --git a/packages/kbn-cli-dev-mode/src/base_path_proxy_server.ts b/packages/kbn-cli-dev-mode/src/base_path_proxy_server.ts index 46cd67e1e06424..f9aaad79231525 100644 --- a/packages/kbn-cli-dev-mode/src/base_path_proxy_server.ts +++ b/packages/kbn-cli-dev-mode/src/base_path_proxy_server.ts @@ -15,7 +15,7 @@ import { sampleSize } from 'lodash'; import * as Rx from 'rxjs'; import { take } from 'rxjs'; import { ByteSizeValue } from '@kbn/config-schema'; -import { createServer, getListenerOptions, getServerOptions } from '@kbn/server-http-tools'; +import { createServer, getServerOptions } from '@kbn/server-http-tools'; import { DevConfig, HttpConfig } from './config'; import { Log } from './log'; @@ -67,8 +67,7 @@ export class BasePathProxyServer { public async start(options: BasePathProxyServerOptions) { const serverOptions = getServerOptions(this.httpConfig); - const listenerOptions = getListenerOptions(this.httpConfig); - this.server = createServer(serverOptions, listenerOptions); + this.server = createServer(serverOptions); // Register hapi plugin that adds proxying functionality. It can be configured // through the route configuration object (see { handler: { proxy: ... } }). diff --git a/packages/kbn-cli-dev-mode/src/integration_tests/base_path_proxy_server.test.ts b/packages/kbn-cli-dev-mode/src/integration_tests/base_path_proxy_server.test.ts index 0f0a69638cfa2a..432f67a75f1b01 100644 --- a/packages/kbn-cli-dev-mode/src/integration_tests/base_path_proxy_server.test.ts +++ b/packages/kbn-cli-dev-mode/src/integration_tests/base_path_proxy_server.test.ts @@ -10,12 +10,7 @@ import { Server } from '@hapi/hapi'; import { EMPTY } from 'rxjs'; import moment from 'moment'; import supertest from 'supertest'; -import { - getServerOptions, - getListenerOptions, - createServer, - IHttpConfig, -} from '@kbn/server-http-tools'; +import { getServerOptions, createServer, type IHttpConfig } from '@kbn/server-http-tools'; import { ByteSizeValue } from '@kbn/config-schema'; import { BasePathProxyServer, BasePathProxyServerOptions } from '../base_path_proxy_server'; @@ -51,8 +46,7 @@ describe('BasePathProxyServer', () => { }; const serverOptions = getServerOptions(config); - const listenerOptions = getListenerOptions(config); - server = createServer(serverOptions, listenerOptions); + server = createServer(serverOptions); // setup and start the proxy server const proxyConfig: IHttpConfig = { ...config, port: 10013 }; @@ -276,8 +270,7 @@ describe('BasePathProxyServer', () => { } as IHttpConfig; const serverOptions = getServerOptions(configWithBasePath); - const listenerOptions = getListenerOptions(configWithBasePath); - server = createServer(serverOptions, listenerOptions); + server = createServer(serverOptions); server.route({ method: 'GET', diff --git a/packages/kbn-health-gateway-server/src/server/server.test.mocks.ts b/packages/kbn-health-gateway-server/src/server/server.test.mocks.ts index 543fe9b29e9ccc..657b1fc26b9309 100644 --- a/packages/kbn-health-gateway-server/src/server/server.test.mocks.ts +++ b/packages/kbn-health-gateway-server/src/server/server.test.mocks.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { sslSchema, getServerOptions, getListenerOptions } from '@kbn/server-http-tools'; +import { sslSchema, getServerOptions } from '@kbn/server-http-tools'; export const hapiStartMock = jest.fn(); export const hapiStopMock = jest.fn(); @@ -18,12 +18,10 @@ export const createServerMock = jest.fn().mockImplementation(() => ({ route: hapiRouteMock, })); export const getServerOptionsMock = jest.fn().mockImplementation(getServerOptions); -export const getListenerOptionsMock = jest.fn().mockImplementation(getListenerOptions); jest.doMock('@kbn/server-http-tools', () => ({ createServer: createServerMock, getServerOptions: getServerOptionsMock, - getListenerOptions: getListenerOptionsMock, sslSchema, SslConfig: jest.fn(), })); diff --git a/packages/kbn-health-gateway-server/src/server/server.test.ts b/packages/kbn-health-gateway-server/src/server/server.test.ts index e0a65229c33741..739bb8f0a59163 100644 --- a/packages/kbn-health-gateway-server/src/server/server.test.ts +++ b/packages/kbn-health-gateway-server/src/server/server.test.ts @@ -9,7 +9,6 @@ import { createServerMock, getServerOptionsMock, - getListenerOptionsMock, hapiStartMock, hapiStopMock, hapiRouteMock, @@ -56,9 +55,6 @@ describe('Server', () => { expect(getServerOptionsMock.mock.calls[0][0]).toEqual( expect.objectContaining({ ...mockConfig }) ); - expect(getListenerOptionsMock.mock.calls[0][0]).toEqual( - expect.objectContaining({ ...mockConfig }) - ); }); test('starts the Hapi server', async () => { diff --git a/packages/kbn-health-gateway-server/src/server/server.ts b/packages/kbn-health-gateway-server/src/server/server.ts index e75df338599813..1b679db5b90854 100644 --- a/packages/kbn-health-gateway-server/src/server/server.ts +++ b/packages/kbn-health-gateway-server/src/server/server.ts @@ -7,7 +7,7 @@ */ import type { Server as HapiServer, ServerRoute as HapiServerRoute } from '@hapi/hapi'; -import { createServer, getServerOptions, getListenerOptions } from '@kbn/server-http-tools'; +import { createServer, getServerOptions } from '@kbn/server-http-tools'; import type { IConfigService } from '@kbn/config'; import type { Logger, LoggerFactory } from '@kbn/logging'; import { ServerConfig } from './server_config'; @@ -40,7 +40,7 @@ export class Server { async start(): Promise { const serverConfig = new ServerConfig(this.config.atPathSync('server')); - this.server = createServer(getServerOptions(serverConfig), getListenerOptions(serverConfig)); + this.server = createServer(getServerOptions(serverConfig)); await this.server.start(); this.log.info(`Server running on ${this.server.info.uri}`); diff --git a/packages/kbn-server-http-tools/index.ts b/packages/kbn-server-http-tools/index.ts index a572cc6ab08321..7efa00c6770151 100644 --- a/packages/kbn-server-http-tools/index.ts +++ b/packages/kbn-server-http-tools/index.ts @@ -9,8 +9,9 @@ export type { IHttpConfig, ISslConfig, ICorsConfig } from './src/types'; export { createServer } from './src/create_server'; export { defaultValidationErrorHandler } from './src/default_validation_error_handler'; -export { getListenerOptions } from './src/get_listener_options'; -export { getServerOptions, getServerTLSOptions } from './src/get_server_options'; +export { getServerListener } from './src/get_listener'; +export { getServerOptions } from './src/get_server_options'; +export { getServerTLSOptions } from './src/get_tls_options'; export { getRequestId } from './src/get_request_id'; export { setTlsConfig } from './src/set_tls_config'; export { sslSchema, SslConfig } from './src/ssl'; diff --git a/packages/kbn-server-http-tools/src/create_server.ts b/packages/kbn-server-http-tools/src/create_server.ts index 4752e342d5d3e3..b57750ffaf5381 100644 --- a/packages/kbn-server-http-tools/src/create_server.ts +++ b/packages/kbn-server-http-tools/src/create_server.ts @@ -7,23 +7,7 @@ */ import { Server, ServerOptions } from '@hapi/hapi'; -import { ListenerOptions } from './get_listener_options'; -export function createServer(serverOptions: ServerOptions, listenerOptions: ListenerOptions) { - const server = new Server(serverOptions); - - server.listener.keepAliveTimeout = listenerOptions.keepaliveTimeout; - server.listener.setTimeout(listenerOptions.socketTimeout); - server.listener.on('timeout', (socket) => { - socket.destroy(); - }); - server.listener.on('clientError', (err, socket) => { - if (socket.writable) { - socket.end(Buffer.from('HTTP/1.1 400 Bad Request\r\n\r\n', 'ascii')); - } else { - socket.destroy(err); - } - }); - - return server; +export function createServer(serverOptions: ServerOptions) { + return new Server(serverOptions); } diff --git a/packages/kbn-server-http-tools/src/get_listener.test.mocks.ts b/packages/kbn-server-http-tools/src/get_listener.test.mocks.ts new file mode 100644 index 00000000000000..1fab2d91913676 --- /dev/null +++ b/packages/kbn-server-http-tools/src/get_listener.test.mocks.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const getServerTLSOptionsMock = jest.fn(); + +jest.doMock('./get_tls_options', () => { + const actual = jest.requireActual('./get_tls_options'); + return { + ...actual, + getServerTLSOptions: getServerTLSOptionsMock, + }; +}); + +export const createHttpServerMock = jest.fn(() => { + return { + on: jest.fn(), + setTimeout: jest.fn(), + }; +}); + +jest.doMock('http', () => { + const actual = jest.requireActual('http'); + return { + ...actual, + createServer: createHttpServerMock, + }; +}); + +export const createHttpsServerMock = jest.fn(() => { + return { + on: jest.fn(), + setTimeout: jest.fn(), + }; +}); + +jest.doMock('https', () => { + const actual = jest.requireActual('https'); + return { + ...actual, + createServer: createHttpsServerMock, + }; +}); diff --git a/packages/kbn-server-http-tools/src/get_listener.test.ts b/packages/kbn-server-http-tools/src/get_listener.test.ts new file mode 100644 index 00000000000000..21e0a93763490c --- /dev/null +++ b/packages/kbn-server-http-tools/src/get_listener.test.ts @@ -0,0 +1,139 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { + getServerTLSOptionsMock, + createHttpServerMock, + createHttpsServerMock, +} from './get_listener.test.mocks'; +import moment from 'moment'; +import { ByteSizeValue } from '@kbn/config-schema'; +import type { IHttpConfig } from './types'; +import { getServerListener } from './get_listener'; + +const createConfig = (parts: Partial): IHttpConfig => ({ + host: 'localhost', + port: 5601, + socketTimeout: 120000, + keepaliveTimeout: 120000, + payloadTimeout: 20000, + shutdownTimeout: moment.duration(30, 'seconds'), + maxPayload: ByteSizeValue.parse('1048576b'), + ...parts, + cors: { + enabled: false, + allowCredentials: false, + allowOrigin: ['*'], + ...parts.cors, + }, + ssl: { + enabled: false, + ...parts.ssl, + }, + restrictInternalApis: false, +}); + +describe('getServerListener', () => { + beforeEach(() => { + getServerTLSOptionsMock.mockReset(); + createHttpServerMock.mockClear(); + createHttpsServerMock.mockClear(); + }); + + describe('when TLS is enabled', () => { + it('calls getServerTLSOptions with the correct parameters', () => { + const config = createConfig({ ssl: { enabled: true } }); + + getServerListener(config); + + expect(getServerTLSOptionsMock).toHaveBeenCalledTimes(1); + expect(getServerTLSOptionsMock).toHaveBeenCalledWith(config.ssl); + }); + + it('calls https.createServer with the correct parameters', () => { + const config = createConfig({ ssl: { enabled: true } }); + + getServerTLSOptionsMock.mockReturnValue({ stub: true }); + + getServerListener(config); + + expect(createHttpsServerMock).toHaveBeenCalledTimes(1); + expect(createHttpsServerMock).toHaveBeenCalledWith({ + stub: true, + keepAliveTimeout: config.keepaliveTimeout, + }); + }); + + it('properly configures the listener', () => { + const config = createConfig({ ssl: { enabled: true } }); + const server = getServerListener(config); + + expect(server.setTimeout).toHaveBeenCalledTimes(1); + expect(server.setTimeout).toHaveBeenCalledWith(config.socketTimeout); + + expect(server.on).toHaveBeenCalledTimes(2); + expect(server.on).toHaveBeenCalledWith('clientError', expect.any(Function)); + expect(server.on).toHaveBeenCalledWith('timeout', expect.any(Function)); + }); + + it('returns the https server', () => { + const config = createConfig({ ssl: { enabled: true } }); + + const server = getServerListener(config); + + const expectedServer = createHttpsServerMock.mock.results[0].value; + + expect(server).toBe(expectedServer); + }); + }); + + describe('when TLS is disabled', () => { + it('does not call getServerTLSOptions', () => { + const config = createConfig({ ssl: { enabled: false } }); + + getServerListener(config); + + expect(getServerTLSOptionsMock).not.toHaveBeenCalled(); + }); + + it('calls http.createServer with the correct parameters', () => { + const config = createConfig({ ssl: { enabled: false } }); + + getServerTLSOptionsMock.mockReturnValue({ stub: true }); + + getServerListener(config); + + expect(createHttpServerMock).toHaveBeenCalledTimes(1); + expect(createHttpServerMock).toHaveBeenCalledWith({ + keepAliveTimeout: config.keepaliveTimeout, + }); + }); + + it('properly configures the listener', () => { + const config = createConfig({ ssl: { enabled: false } }); + const server = getServerListener(config); + + expect(server.setTimeout).toHaveBeenCalledTimes(1); + expect(server.setTimeout).toHaveBeenCalledWith(config.socketTimeout); + + expect(server.on).toHaveBeenCalledTimes(2); + expect(server.on).toHaveBeenCalledWith('clientError', expect.any(Function)); + expect(server.on).toHaveBeenCalledWith('timeout', expect.any(Function)); + }); + + it('returns the http server', () => { + const config = createConfig({ ssl: { enabled: false } }); + + const server = getServerListener(config); + + const expectedServer = createHttpServerMock.mock.results[0].value; + + expect(server).toBe(expectedServer); + }); + }); +}); diff --git a/packages/kbn-server-http-tools/src/get_listener.ts b/packages/kbn-server-http-tools/src/get_listener.ts new file mode 100644 index 00000000000000..f1dbe3de753fac --- /dev/null +++ b/packages/kbn-server-http-tools/src/get_listener.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import http from 'http'; +import https from 'https'; +import { getServerTLSOptions } from './get_tls_options'; +import type { IHttpConfig, ServerListener } from './types'; + +interface GetServerListenerOptions { + configureTLS?: boolean; +} + +export function getServerListener( + config: IHttpConfig, + options: GetServerListenerOptions = {} +): ServerListener { + return configureHttp1Listener(config, options); +} + +const configureHttp1Listener = ( + config: IHttpConfig, + { configureTLS = true }: GetServerListenerOptions = {} +): ServerListener => { + const useTLS = configureTLS && config.ssl.enabled; + const tlsOptions = useTLS ? getServerTLSOptions(config.ssl) : undefined; + + const listener = useTLS + ? https.createServer({ + ...tlsOptions, + keepAliveTimeout: config.keepaliveTimeout, + }) + : http.createServer({ + keepAliveTimeout: config.keepaliveTimeout, + }); + + listener.setTimeout(config.socketTimeout); + listener.on('timeout', (socket) => { + socket.destroy(); + }); + listener.on('clientError', (err, socket) => { + if (socket.writable) { + socket.end(Buffer.from('HTTP/1.1 400 Bad Request\r\n\r\n', 'ascii')); + } else { + socket.destroy(err); + } + }); + + return listener; +}; diff --git a/packages/kbn-server-http-tools/src/get_listener_options.ts b/packages/kbn-server-http-tools/src/get_server_options.test.mocks.ts similarity index 55% rename from packages/kbn-server-http-tools/src/get_listener_options.ts rename to packages/kbn-server-http-tools/src/get_server_options.test.mocks.ts index 00884312b599fb..32d808f2644364 100644 --- a/packages/kbn-server-http-tools/src/get_listener_options.ts +++ b/packages/kbn-server-http-tools/src/get_server_options.test.mocks.ts @@ -6,16 +6,12 @@ * Side Public License, v 1. */ -import { IHttpConfig } from './types'; +export const getServerListenerMock = jest.fn(); -export interface ListenerOptions { - keepaliveTimeout: number; - socketTimeout: number; -} - -export function getListenerOptions(config: IHttpConfig): ListenerOptions { +jest.doMock('./get_listener', () => { + const actual = jest.requireActual('./get_listener'); return { - keepaliveTimeout: config.keepaliveTimeout, - socketTimeout: config.socketTimeout, + ...actual, + getServerListener: getServerListenerMock, }; -} +}); diff --git a/packages/kbn-server-http-tools/src/get_server_options.test.ts b/packages/kbn-server-http-tools/src/get_server_options.test.ts index 2d8f78a1405ac3..00c140f46f6c75 100644 --- a/packages/kbn-server-http-tools/src/get_server_options.test.ts +++ b/packages/kbn-server-http-tools/src/get_server_options.test.ts @@ -6,10 +6,11 @@ * Side Public License, v 1. */ +import { getServerListenerMock } from './get_server_options.test.mocks'; import moment from 'moment'; import { ByteSizeValue } from '@kbn/config-schema'; +import type { IHttpConfig } from './types'; import { getServerOptions } from './get_server_options'; -import { IHttpConfig } from './types'; jest.mock('fs', () => { const original = jest.requireActual('fs'); @@ -43,69 +44,42 @@ const createConfig = (parts: Partial): IHttpConfig => ({ }); describe('getServerOptions', () => { - beforeEach(() => - jest.requireMock('fs').readFileSync.mockImplementation((path: string) => `content-${path}`) - ); + beforeEach(() => { + jest.requireMock('fs').readFileSync.mockImplementation((path: string) => `content-${path}`); + getServerListenerMock.mockReset(); + }); afterEach(() => { jest.clearAllMocks(); }); - it('properly configures TLS with default options', () => { - const httpConfig = createConfig({ - ssl: { - enabled: true, - key: 'some-key-path', - certificate: 'some-certificate-path', - }, - }); + it('calls `getServerListener` to retrieve the listener that will be provided in the config', () => { + const listener = Symbol('listener'); + getServerListenerMock.mockReturnValue(listener); - expect(getServerOptions(httpConfig).tls).toMatchInlineSnapshot(` - Object { - "ca": undefined, - "cert": "some-certificate-path", - "ciphers": undefined, - "honorCipherOrder": true, - "key": "some-key-path", - "passphrase": undefined, - "rejectUnauthorized": undefined, - "requestCert": undefined, - "secureOptions": undefined, - } - `); - }); + const httpConfig = createConfig({}); + const serverOptions = getServerOptions(httpConfig, { configureTLS: true }); - it('properly configures TLS with client authentication', () => { - const httpConfig = createConfig({ - ssl: { - enabled: true, - key: 'some-key-path', - certificate: 'some-certificate-path', - certificateAuthorities: ['ca-1', 'ca-2'], - cipherSuites: ['suite-a', 'suite-b'], - keyPassphrase: 'passPhrase', - rejectUnauthorized: true, - requestCert: true, - getSecureOptions: () => 42, - }, - }); + expect(getServerListenerMock).toHaveBeenCalledTimes(1); + expect(getServerListenerMock).toHaveBeenCalledWith(httpConfig, { configureTLS: true }); + + expect(serverOptions.listener).toBe(listener); + }); - expect(getServerOptions(httpConfig).tls).toMatchInlineSnapshot(` - Object { - "ca": Array [ - "ca-1", - "ca-2", - ], - "cert": "some-certificate-path", - "ciphers": "suite-a:suite-b", - "honorCipherOrder": true, - "key": "some-key-path", - "passphrase": "passPhrase", - "rejectUnauthorized": true, - "requestCert": true, - "secureOptions": 42, - } - `); + it('properly configures the tls option depending on the config and the configureTLS flag', () => { + expect( + getServerOptions(createConfig({ ssl: { enabled: true } }), { configureTLS: true }).tls + ).toBe(true); + expect(getServerOptions(createConfig({ ssl: { enabled: true } }), {}).tls).toBe(true); + expect( + getServerOptions(createConfig({ ssl: { enabled: true } }), { configureTLS: false }).tls + ).toBe(false); + expect( + getServerOptions(createConfig({ ssl: { enabled: false } }), { configureTLS: true }).tls + ).toBe(false); + expect( + getServerOptions(createConfig({ ssl: { enabled: false } }), { configureTLS: false }).tls + ).toBe(false); }); it('properly configures CORS when cors enabled', () => { diff --git a/packages/kbn-server-http-tools/src/get_server_options.ts b/packages/kbn-server-http-tools/src/get_server_options.ts index 37a8f5f69cc2bf..fe0a669fd62f5c 100644 --- a/packages/kbn-server-http-tools/src/get_server_options.ts +++ b/packages/kbn-server-http-tools/src/get_server_options.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { RouteOptionsCors, ServerOptions } from '@hapi/hapi'; -import { ServerOptions as TLSOptions } from 'https'; +import type { RouteOptionsCors, ServerOptions } from '@hapi/hapi'; +import type { IHttpConfig } from './types'; import { defaultValidationErrorHandler } from './default_validation_error_handler'; -import { IHttpConfig, ISslConfig } from './types'; +import { getServerListener } from './get_listener'; const corsAllowedHeaders = ['Accept', 'Authorization', 'Content-Type', 'If-None-Match', 'kbn-xsrf']; @@ -27,6 +27,10 @@ export function getServerOptions(config: IHttpConfig, { configureTLS = true } = const options: ServerOptions = { host: config.host, port: config.port, + // manually configuring the listener + listener: getServerListener(config, { configureTLS }), + // must set to true when manually passing a TLS listener, false otherwise + tls: configureTLS && config.ssl.enabled, routes: { cache: { privacy: 'private', @@ -51,31 +55,5 @@ export function getServerOptions(config: IHttpConfig, { configureTLS = true } = }, }; - if (configureTLS) { - options.tls = getServerTLSOptions(config.ssl); - } - return options; } - -/** - * Converts Kibana `SslConfig` into `TLSOptions` that are accepted by the Hapi server, - * and by https.Server.setSecureContext() - */ -export function getServerTLSOptions(ssl: ISslConfig): TLSOptions | undefined { - if (!ssl.enabled) { - return undefined; - } - return { - ca: ssl.certificateAuthorities, - cert: ssl.certificate, - ciphers: ssl.cipherSuites?.join(':'), - // We use the server's cipher order rather than the client's to prevent the BEAST attack. - honorCipherOrder: true, - key: ssl.key, - passphrase: ssl.keyPassphrase, - secureOptions: ssl.getSecureOptions ? ssl.getSecureOptions() : undefined, - requestCert: ssl.requestCert, - rejectUnauthorized: ssl.rejectUnauthorized, - }; -} diff --git a/packages/kbn-server-http-tools/src/get_tls_options.test.ts b/packages/kbn-server-http-tools/src/get_tls_options.test.ts new file mode 100644 index 00000000000000..0a50209db50c91 --- /dev/null +++ b/packages/kbn-server-http-tools/src/get_tls_options.test.ts @@ -0,0 +1,110 @@ +/* + * 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 moment from 'moment'; +import { ByteSizeValue } from '@kbn/config-schema'; +import type { IHttpConfig } from './types'; +import { getServerTLSOptions } from './get_tls_options'; + +jest.mock('fs', () => { + const original = jest.requireActual('fs'); + return { + // Hapi Inert patches native methods + ...original, + readFileSync: jest.fn(), + }; +}); + +const createConfig = (parts: Partial): IHttpConfig => ({ + host: 'localhost', + port: 5601, + socketTimeout: 120000, + keepaliveTimeout: 120000, + payloadTimeout: 20000, + shutdownTimeout: moment.duration(30, 'seconds'), + maxPayload: ByteSizeValue.parse('1048576b'), + ...parts, + cors: { + enabled: false, + allowCredentials: false, + allowOrigin: ['*'], + ...parts.cors, + }, + ssl: { + enabled: false, + ...parts.ssl, + }, + restrictInternalApis: false, +}); + +describe('getServerTLSOptions', () => { + beforeEach(() => + jest.requireMock('fs').readFileSync.mockImplementation((path: string) => `content-${path}`) + ); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('properly configures TLS with default options', () => { + const httpConfig = createConfig({ + ssl: { + enabled: true, + key: 'some-key-path', + certificate: 'some-certificate-path', + }, + }); + + expect(getServerTLSOptions(httpConfig.ssl)).toMatchInlineSnapshot(` + Object { + "ca": undefined, + "cert": "some-certificate-path", + "ciphers": undefined, + "honorCipherOrder": true, + "key": "some-key-path", + "passphrase": undefined, + "rejectUnauthorized": undefined, + "requestCert": undefined, + "secureOptions": undefined, + } + `); + }); + + it('properly configures TLS with client authentication', () => { + const httpConfig = createConfig({ + ssl: { + enabled: true, + key: 'some-key-path', + certificate: 'some-certificate-path', + certificateAuthorities: ['ca-1', 'ca-2'], + cipherSuites: ['suite-a', 'suite-b'], + keyPassphrase: 'passPhrase', + rejectUnauthorized: true, + requestCert: true, + getSecureOptions: () => 42, + }, + }); + + expect(getServerTLSOptions(httpConfig.ssl)).toMatchInlineSnapshot(` + Object { + "ca": Array [ + "ca-1", + "ca-2", + ], + "cert": "some-certificate-path", + "ciphers": "suite-a:suite-b", + "honorCipherOrder": true, + "key": "some-key-path", + "passphrase": "passPhrase", + "rejectUnauthorized": true, + "requestCert": true, + "secureOptions": 42, + } + `); + }); +}); diff --git a/packages/kbn-server-http-tools/src/get_tls_options.ts b/packages/kbn-server-http-tools/src/get_tls_options.ts new file mode 100644 index 00000000000000..eb55327cef326c --- /dev/null +++ b/packages/kbn-server-http-tools/src/get_tls_options.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ServerOptions as TLSOptions } from 'https'; +import { ISslConfig } from './types'; + +/** + * Converts Kibana `SslConfig` into `TLSOptions` that are accepted by the Hapi server, + * and by https.Server.setSecureContext() + */ +export function getServerTLSOptions(ssl: ISslConfig): TLSOptions | undefined { + if (!ssl.enabled) { + return undefined; + } + return { + ca: ssl.certificateAuthorities, + cert: ssl.certificate, + ciphers: ssl.cipherSuites?.join(':'), + // We use the server's cipher order rather than the client's to prevent the BEAST attack. + honorCipherOrder: true, + key: ssl.key, + passphrase: ssl.keyPassphrase, + secureOptions: ssl.getSecureOptions ? ssl.getSecureOptions() : undefined, + requestCert: ssl.requestCert, + rejectUnauthorized: ssl.rejectUnauthorized, + }; +} diff --git a/packages/kbn-server-http-tools/src/set_tls_config.test.mocks.ts b/packages/kbn-server-http-tools/src/set_tls_config.test.mocks.ts index 4b93301b334e5f..597ab7d176c8e7 100644 --- a/packages/kbn-server-http-tools/src/set_tls_config.test.mocks.ts +++ b/packages/kbn-server-http-tools/src/set_tls_config.test.mocks.ts @@ -8,8 +8,8 @@ export const getServerTLSOptionsMock = jest.fn(); -jest.doMock('./get_server_options', () => { - const actual = jest.requireActual('./get_server_options'); +jest.doMock('./get_tls_options', () => { + const actual = jest.requireActual('./get_tls_options'); return { ...actual, getServerTLSOptions: getServerTLSOptionsMock, diff --git a/packages/kbn-server-http-tools/src/set_tls_config.ts b/packages/kbn-server-http-tools/src/set_tls_config.ts index 1f2e1d70fa1260..6b0cd35f067ea6 100644 --- a/packages/kbn-server-http-tools/src/set_tls_config.ts +++ b/packages/kbn-server-http-tools/src/set_tls_config.ts @@ -7,18 +7,17 @@ */ import type { Server as HapiServer } from '@hapi/hapi'; -import type { Server as HttpServer } from 'http'; import type { Server as TlsServer } from 'https'; -import type { ISslConfig } from './types'; -import { getServerTLSOptions } from './get_server_options'; +import type { ISslConfig, ServerListener } from './types'; +import { getServerTLSOptions } from './get_tls_options'; -function isServerTLS(server: HttpServer): server is TlsServer { +function isTLSListener(server: ServerListener): server is TlsServer { return 'setSecureContext' in server; } export const setTlsConfig = (hapiServer: HapiServer, sslConfig: ISslConfig) => { const server = hapiServer.listener; - if (!isServerTLS(server)) { + if (!isTLSListener(server)) { throw new Error('tried to set TLS config on a non-TLS http server'); } const tlsOptions = getServerTLSOptions(sslConfig); diff --git a/packages/kbn-server-http-tools/src/types.ts b/packages/kbn-server-http-tools/src/types.ts index 693cb6feb46fe5..88533162b2a326 100644 --- a/packages/kbn-server-http-tools/src/types.ts +++ b/packages/kbn-server-http-tools/src/types.ts @@ -6,9 +6,19 @@ * Side Public License, v 1. */ +import type { Server as HttpServer } from 'http'; +import type { Server as HttpsServer } from 'https'; import { ByteSizeValue } from '@kbn/config-schema'; import type { Duration } from 'moment'; +/** + * Composite type of all possible kind of Listener types. + * + * Unfortunately, there's no real common interface between all those concrete classes, + * as `net.Server` and `tls.Server` don't list all the APIs we're using (such as event binding) + */ +export type ServerListener = HttpServer | HttpsServer; + export interface IHttpConfig { host: string; port: number; diff --git a/src/core/server/integration_tests/http/set_tls_config.test.ts b/src/core/server/integration_tests/http/set_tls_config.test.ts index 6c198d820670fd..b809a320757334 100644 --- a/src/core/server/integration_tests/http/set_tls_config.test.ts +++ b/src/core/server/integration_tests/http/set_tls_config.test.ts @@ -8,12 +8,7 @@ import supertest from 'supertest'; import { KBN_CERT_PATH, KBN_KEY_PATH, ES_KEY_PATH, ES_CERT_PATH } from '@kbn/dev-utils'; -import { - createServer, - getListenerOptions, - getServerOptions, - setTlsConfig, -} from '@kbn/server-http-tools'; +import { createServer, getServerOptions, setTlsConfig } from '@kbn/server-http-tools'; import { HttpConfig, config as httpConfig, @@ -47,8 +42,7 @@ describe('setTlsConfig', () => { const firstConfig = new HttpConfig(rawHttpConfig, CSP_CONFIG, EXTERNAL_URL_CONFIG); const serverOptions = getServerOptions(firstConfig); - const listenerOptions = getListenerOptions(firstConfig); - const server = createServer(serverOptions, listenerOptions); + const server = createServer(serverOptions); server.route({ method: 'GET', From ab3a272afcbe35941705764d62e03c6f14158964 Mon Sep 17 00:00:00 2001 From: Tre Date: Tue, 21 May 2024 16:18:01 +0100 Subject: [PATCH 62/97] [skip on mki] x-pack/test_serverless/functional/test_suites/search/playground_overview.ts (#183903) [skip on mki] x-pack/test_serverless/functional/test_suites/search/playground_overview.ts ## Summary See details: https://github.com/elastic/kibana/issues/183893 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../functional/test_suites/search/playground_overview.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts b/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts index 0a75db15454401..40a36362a585ee 100644 --- a/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts +++ b/x-pack/test_serverless/functional/test_suites/search/playground_overview.ts @@ -63,7 +63,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const createIndex = async () => await esArchiver.load(esArchiveIndex); let roleAuthc: RoleCredentials; - describe('Serverless Playground Overview', () => { + describe('Serverless Playground Overview', function () { + // see details: https://github.com/elastic/kibana/issues/183893 + this.tags(['failsOnMKI']); + let removeOpenAIConnector: () => Promise; let createConnector: () => Promise; From 46c8a999de788715efe2f124ad767d4e0ab86c04 Mon Sep 17 00:00:00 2001 From: Umberto Pepato Date: Tue, 21 May 2024 17:20:29 +0200 Subject: [PATCH 63/97] [ResponseOps][Rules] Fix rules list item enabled state updates causing test flakyness (#183805) ## Summary Removes optimistic updates from rules list item when enabling/disabling rules to avoid out-of-sync states (the likely cause of [this](https://github.com/elastic/kibana/issues/157623) flaky test). Fixes #157623 --- .../components/rule_status_dropdown.tsx | 23 +++++-------------- .../rules_list/rules_list.ts | 3 +-- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index 624e6e5f276e7b..ddd836a4f0993f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useState, useEffect, useCallback } from 'react'; +import React, { useState, useCallback } from 'react'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; import type { RuleSnooze } from '@kbn/alerting-plugin/common'; @@ -29,7 +29,6 @@ import { Rule, SnoozeSchedule, BulkOperationResponse } from '../../../../types'; import { ToastWithCircuitBreakerContent } from '../../../components/toast_with_circuit_breaker_content'; import { UntrackAlertsModal } from '../../common/components/untrack_alerts_modal'; -export type SnoozeUnit = 'm' | 'h' | 'd' | 'w' | 'M'; const SNOOZE_END_TIME_FORMAT = 'LL @ LT'; type DropdownRuleRecord = Pick< @@ -60,24 +59,16 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ hideSnoozeOption = false, direction = 'column', }: ComponentOpts) => { - const [isEnabled, setIsEnabled] = useState(rule.enabled); - const [isSnoozed, setIsSnoozed] = useState(!hideSnoozeOption && isRuleSnoozed(rule)); - const { notifications: { toasts }, i18n: i18nStart, theme, } = useKibana().services; - useEffect(() => { - setIsEnabled(rule.enabled); - }, [rule.enabled]); - useEffect(() => { - if (!hideSnoozeOption) setIsSnoozed(isRuleSnoozed(rule)); - }, [rule, hideSnoozeOption]); const [isUpdating, setIsUpdating] = useState(false); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [isUntrackAlertsModalOpen, setIsUntrackAlertsModalOpen] = useState(false); + const isSnoozed = !hideSnoozeOption && isRuleSnoozed(rule); const onClickBadge = useCallback(() => setIsPopoverOpen((isOpen) => !isOpen), [setIsPopoverOpen]); const onClosePopover = useCallback(() => setIsPopoverOpen(false), [setIsPopoverOpen]); @@ -106,7 +97,6 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ setIsUpdating(true); try { await enableRuleInternal(); - setIsEnabled(true); onRuleChanged(); } finally { setIsUpdating(false); @@ -118,7 +108,6 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ setIsUpdating(true); try { await disableRule(untrack); - setIsEnabled(false); onRuleChanged(); } finally { setIsUpdating(false); @@ -181,11 +170,11 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ [unsnoozeRule, onRuleChanged, onClosePopover] ); - const badgeColor = !isEnabled ? 'default' : isSnoozed ? 'warning' : 'primary'; - const badgeMessage = !isEnabled ? DISABLED : isSnoozed ? SNOOZED : ENABLED; + const badgeColor = !rule.enabled ? 'default' : isSnoozed ? 'warning' : 'primary'; + const badgeMessage = !rule.enabled ? DISABLED : isSnoozed ? SNOOZED : ENABLED; const remainingSnoozeTime = - isEnabled && isSnoozed ? ( + rule.enabled && isSnoozed ? ( = ({ { return await retry.try(async () => { const rules = await pageObjects.triggersActionsUI.getAlertsList(); From 977b0f61d205af52fcce1c08f76d0c8ef52d49f7 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Tue, 21 May 2024 11:56:52 -0400 Subject: [PATCH 64/97] [Security Solution][Endpoint] Fix Responder menu item being enabled on Alert Details "Take Action" menu when no agent id is present (#183751) ## Summary Fixes #183018 - Disable the "Respond" menu item on the "Take Action" menu of the Alert Details when the alert data does not include an endpoint agent id --- .../use_responder_action_data.test.ts | 12 ++++++++++++ .../endpoint_responder/use_responder_action_data.ts | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts index e6b3b1886deec7..9a00f462cd8700 100644 --- a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts +++ b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts @@ -11,6 +11,7 @@ import { renderHook } from '@testing-library/react-hooks'; import { useGetEndpointDetails } from '../../../management/hooks'; import { HostStatus } from '../../../../common/endpoint/types'; import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; +import { HOST_ENDPOINT_UNENROLLED_TOOLTIP } from './translations'; jest.mock('../../../common/hooks/use_experimental_features'); jest.mock('../../../management/hooks', () => ({ @@ -110,6 +111,17 @@ describe('#useResponderActionData', () => { ); expect(result.current.isDisabled).toEqual(true); }); + + it('should return responder menu item `disabled` when agentType is `endpoint` but no endpoint id is provided', () => { + const { result } = renderHook(() => + useResponderActionData({ + endpointId: '', + agentType: 'endpoint', + }) + ); + expect(result.current.isDisabled).toEqual(true); + expect(result.current.tooltip).toEqual(HOST_ENDPOINT_UNENROLLED_TOOLTIP); + }); }); describe('when agentType is `sentinel_one`', () => { diff --git a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts index 820837393461ad..8842eafbb13d78 100644 --- a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts +++ b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts @@ -112,6 +112,10 @@ export const useResponderActionData = ({ } } + if (!endpointId) { + return [true, HOST_ENDPOINT_UNENROLLED_TOOLTIP]; + } + // Still loading host info if (isFetching) { return [true, LOADING_ENDPOINT_DATA_TOOLTIP]; @@ -141,6 +145,7 @@ export const useResponderActionData = ({ return [false, undefined]; }, [ isEndpointHost, + endpointId, isFetching, error, hostInfo?.host_status, From 3fc2b895b078f0ef5bd98af6e21690d10cbb854a Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Tue, 21 May 2024 12:43:25 -0400 Subject: [PATCH 65/97] fix(slo): Force using exactly one rolling window as date range by default (#183754) --- .../historical_summary_client.test.ts.snap | 452 +++++++++--------- .../historical_summary_client.test.ts | 6 +- .../services/historical_summary_client.ts | 6 +- .../apis/slos/fetch_historical_summary.ts | 10 +- .../slos/fetch_historical_summary.ts | 6 +- 5 files changed, 242 insertions(+), 238 deletions(-) diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/historical_summary_client.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/historical_summary_client.test.ts.snap index 2759ac43d21495..3b495e56db5939 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/historical_summary_client.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/historical_summary_client.test.ts.snap @@ -9423,6 +9423,146 @@ Object { `; exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 1`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.55648, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.44352, + }, + "sliValue": 0.972176, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 2`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.5574, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.4426, + }, + "sliValue": 0.97213, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 3`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.55834, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.44166, + }, + "sliValue": 0.972083, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 4`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.55926, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.44074, + }, + "sliValue": 0.972037, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 5`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56018, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43982, + }, + "sliValue": 0.971991, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 6`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56112, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43888, + }, + "sliValue": 0.971944, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 7`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56204, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43796, + }, + "sliValue": 0.971898, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 8`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56296, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43704, + }, + "sliValue": 0.971852, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 9`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56388, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43612, + }, + "sliValue": 0.971806, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 10`] = ` +Object { + "date": Any, + "errorBudget": Object { + "consumed": 0.56482, + "initial": 0.05, + "isEstimated": false, + "remaining": 0.43518, + }, + "sliValue": 0.971759, + "status": "HEALTHY", +} +`; + +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 11`] = ` Object { "date": Any, "errorBudget": Object { @@ -9436,7 +9576,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 2`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 12`] = ` Object { "date": Any, "errorBudget": Object { @@ -9450,7 +9590,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 3`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 13`] = ` Object { "date": Any, "errorBudget": Object { @@ -9464,7 +9604,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 4`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 14`] = ` Object { "date": Any, "errorBudget": Object { @@ -9478,7 +9618,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 5`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 15`] = ` Object { "date": Any, "errorBudget": Object { @@ -9492,7 +9632,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 6`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 16`] = ` Object { "date": Any, "errorBudget": Object { @@ -9506,7 +9646,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 7`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 17`] = ` Object { "date": Any, "errorBudget": Object { @@ -9520,7 +9660,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 8`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 18`] = ` Object { "date": Any, "errorBudget": Object { @@ -9534,7 +9674,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 9`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 19`] = ` Object { "date": Any, "errorBudget": Object { @@ -9548,7 +9688,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 10`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 20`] = ` Object { "date": Any, "errorBudget": Object { @@ -9562,7 +9702,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 11`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 21`] = ` Object { "date": Any, "errorBudget": Object { @@ -9576,7 +9716,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 12`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 22`] = ` Object { "date": Any, "errorBudget": Object { @@ -9590,7 +9730,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 13`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 23`] = ` Object { "date": Any, "errorBudget": Object { @@ -9604,7 +9744,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 14`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 24`] = ` Object { "date": Any, "errorBudget": Object { @@ -9618,7 +9758,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 15`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 25`] = ` Object { "date": Any, "errorBudget": Object { @@ -9632,7 +9772,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 16`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 26`] = ` Object { "date": Any, "errorBudget": Object { @@ -9646,7 +9786,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 17`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 27`] = ` Object { "date": Any, "errorBudget": Object { @@ -9660,7 +9800,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 18`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 28`] = ` Object { "date": Any, "errorBudget": Object { @@ -9674,7 +9814,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 19`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 29`] = ` Object { "date": Any, "errorBudget": Object { @@ -9688,7 +9828,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 20`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 30`] = ` Object { "date": Any, "errorBudget": Object { @@ -9702,7 +9842,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 21`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 31`] = ` Object { "date": Any, "errorBudget": Object { @@ -9716,7 +9856,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 22`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 32`] = ` Object { "date": Any, "errorBudget": Object { @@ -9730,7 +9870,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 23`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 33`] = ` Object { "date": Any, "errorBudget": Object { @@ -9744,7 +9884,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 24`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 34`] = ` Object { "date": Any, "errorBudget": Object { @@ -9758,7 +9898,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 25`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 35`] = ` Object { "date": Any, "errorBudget": Object { @@ -9772,7 +9912,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 26`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 36`] = ` Object { "date": Any, "errorBudget": Object { @@ -9786,7 +9926,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 27`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 37`] = ` Object { "date": Any, "errorBudget": Object { @@ -9800,7 +9940,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 28`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 38`] = ` Object { "date": Any, "errorBudget": Object { @@ -9814,7 +9954,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 29`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 39`] = ` Object { "date": Any, "errorBudget": Object { @@ -9828,7 +9968,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 30`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 40`] = ` Object { "date": Any, "errorBudget": Object { @@ -9842,7 +9982,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 31`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 41`] = ` Object { "date": Any, "errorBudget": Object { @@ -9856,7 +9996,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 32`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 42`] = ` Object { "date": Any, "errorBudget": Object { @@ -9870,7 +10010,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 33`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 43`] = ` Object { "date": Any, "errorBudget": Object { @@ -9884,7 +10024,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 34`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 44`] = ` Object { "date": Any, "errorBudget": Object { @@ -9898,7 +10038,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 35`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 45`] = ` Object { "date": Any, "errorBudget": Object { @@ -9912,7 +10052,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 36`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 46`] = ` Object { "date": Any, "errorBudget": Object { @@ -9926,7 +10066,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 37`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 47`] = ` Object { "date": Any, "errorBudget": Object { @@ -9940,7 +10080,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 38`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 48`] = ` Object { "date": Any, "errorBudget": Object { @@ -9954,7 +10094,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 39`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 49`] = ` Object { "date": Any, "errorBudget": Object { @@ -9968,7 +10108,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 40`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 50`] = ` Object { "date": Any, "errorBudget": Object { @@ -9982,7 +10122,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 41`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 51`] = ` Object { "date": Any, "errorBudget": Object { @@ -9996,7 +10136,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 42`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 52`] = ` Object { "date": Any, "errorBudget": Object { @@ -10010,7 +10150,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 43`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 53`] = ` Object { "date": Any, "errorBudget": Object { @@ -10024,7 +10164,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 44`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 54`] = ` Object { "date": Any, "errorBudget": Object { @@ -10038,7 +10178,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 45`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 55`] = ` Object { "date": Any, "errorBudget": Object { @@ -10052,7 +10192,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 46`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 56`] = ` Object { "date": Any, "errorBudget": Object { @@ -10066,7 +10206,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 47`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 57`] = ` Object { "date": Any, "errorBudget": Object { @@ -10080,7 +10220,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 48`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 58`] = ` Object { "date": Any, "errorBudget": Object { @@ -10094,7 +10234,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 49`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 59`] = ` Object { "date": Any, "errorBudget": Object { @@ -10108,7 +10248,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 50`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 60`] = ` Object { "date": Any, "errorBudget": Object { @@ -10122,7 +10262,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 51`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 61`] = ` Object { "date": Any, "errorBudget": Object { @@ -10136,7 +10276,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 52`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 62`] = ` Object { "date": Any, "errorBudget": Object { @@ -10150,7 +10290,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 53`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 63`] = ` Object { "date": Any, "errorBudget": Object { @@ -10164,7 +10304,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 54`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 64`] = ` Object { "date": Any, "errorBudget": Object { @@ -10178,7 +10318,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 55`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 65`] = ` Object { "date": Any, "errorBudget": Object { @@ -10192,7 +10332,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 56`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 66`] = ` Object { "date": Any, "errorBudget": Object { @@ -10206,7 +10346,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 57`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 67`] = ` Object { "date": Any, "errorBudget": Object { @@ -10220,7 +10360,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 58`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 68`] = ` Object { "date": Any, "errorBudget": Object { @@ -10234,7 +10374,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 59`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 69`] = ` Object { "date": Any, "errorBudget": Object { @@ -10248,7 +10388,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 60`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 70`] = ` Object { "date": Any, "errorBudget": Object { @@ -10262,7 +10402,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 61`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 71`] = ` Object { "date": Any, "errorBudget": Object { @@ -10276,7 +10416,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 62`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 72`] = ` Object { "date": Any, "errorBudget": Object { @@ -10290,7 +10430,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 63`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 73`] = ` Object { "date": Any, "errorBudget": Object { @@ -10304,7 +10444,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 64`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 74`] = ` Object { "date": Any, "errorBudget": Object { @@ -10318,7 +10458,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 65`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 75`] = ` Object { "date": Any, "errorBudget": Object { @@ -10332,7 +10472,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 66`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 76`] = ` Object { "date": Any, "errorBudget": Object { @@ -10346,7 +10486,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 67`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 77`] = ` Object { "date": Any, "errorBudget": Object { @@ -10360,7 +10500,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 68`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 78`] = ` Object { "date": Any, "errorBudget": Object { @@ -10374,7 +10514,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 69`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 79`] = ` Object { "date": Any, "errorBudget": Object { @@ -10388,7 +10528,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 70`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 80`] = ` Object { "date": Any, "errorBudget": Object { @@ -10402,7 +10542,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 71`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 81`] = ` Object { "date": Any, "errorBudget": Object { @@ -10416,7 +10556,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 72`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 82`] = ` Object { "date": Any, "errorBudget": Object { @@ -10430,7 +10570,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 73`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 83`] = ` Object { "date": Any, "errorBudget": Object { @@ -10444,7 +10584,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 74`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 84`] = ` Object { "date": Any, "errorBudget": Object { @@ -10458,7 +10598,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 75`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 85`] = ` Object { "date": Any, "errorBudget": Object { @@ -10472,7 +10612,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 76`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 86`] = ` Object { "date": Any, "errorBudget": Object { @@ -10486,7 +10626,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 77`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 87`] = ` Object { "date": Any, "errorBudget": Object { @@ -10500,7 +10640,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 78`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 88`] = ` Object { "date": Any, "errorBudget": Object { @@ -10514,7 +10654,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 79`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 89`] = ` Object { "date": Any, "errorBudget": Object { @@ -10528,7 +10668,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 80`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 90`] = ` Object { "date": Any, "errorBudget": Object { @@ -10542,7 +10682,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 81`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 91`] = ` Object { "date": Any, "errorBudget": Object { @@ -10556,7 +10696,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 82`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 92`] = ` Object { "date": Any, "errorBudget": Object { @@ -10570,7 +10710,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 83`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 93`] = ` Object { "date": Any, "errorBudget": Object { @@ -10584,7 +10724,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 84`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 94`] = ` Object { "date": Any, "errorBudget": Object { @@ -10598,7 +10738,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 85`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 95`] = ` Object { "date": Any, "errorBudget": Object { @@ -10612,7 +10752,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 86`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 96`] = ` Object { "date": Any, "errorBudget": Object { @@ -10626,7 +10766,7 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 87`] = ` +exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 97`] = ` Object { "date": Any, "errorBudget": Object { @@ -10640,146 +10780,6 @@ Object { } `; -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 88`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.6463, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.3537, - }, - "sliValue": 0.967685, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 89`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.64722, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.35278, - }, - "sliValue": 0.967639, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 90`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.64814, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.35186, - }, - "sliValue": 0.967593, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 91`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.64908, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.35092, - }, - "sliValue": 0.967546, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 92`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.65, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.35, - }, - "sliValue": 0.9675, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 93`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.65092, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.34908, - }, - "sliValue": 0.967454, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 94`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.65186, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.34814, - }, - "sliValue": 0.967407, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 95`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.65278, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.34722, - }, - "sliValue": 0.967361, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 96`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.6537, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.3463, - }, - "sliValue": 0.967315, - "status": "HEALTHY", -} -`; - -exports[`FetchHistoricalSummary Rolling and Timeslices SLOs returns the summary using the provided date range 97`] = ` -Object { - "date": Any, - "errorBudget": Object { - "consumed": 0.65462, - "initial": 0.05, - "isEstimated": false, - "remaining": 0.34538, - }, - "sliValue": 0.967269, - "status": "HEALTHY", -} -`; - exports[`FetchHistoricalSummary filters with the 'instanceId' when provided 1`] = ` Object { "date": Any, diff --git a/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.test.ts b/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.test.ts index 939b240f5d88fc..d01d0f654bf549 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.test.ts @@ -46,7 +46,7 @@ const generateEsResponseForRollingSLO = (slo: SLODefinition, overridedRange?: Da ? rollingDurationInDays + overridedRangeInDays : rollingDurationInDays * 2; const numberOfBuckets = fullDuration * bucketsPerDay; - const startDay = moment().subtract(fullDuration, 'day').startOf('day'); + const startRange = moment().subtract(fullDuration, 'day').startOf('minute'); const bucketSizeInHour = moment .duration( fixedInterval.slice(0, -1), @@ -67,11 +67,11 @@ const generateEsResponseForRollingSLO = (slo: SLODefinition, overridedRange?: Da buckets: Array(numberOfBuckets) .fill(0) .map((_, index) => ({ - key_as_string: startDay + key_as_string: startRange .clone() .add(index * bucketSizeInHour, 'hours') .toISOString(), - key: startDay + key: startRange .clone() .add(index * bucketSizeInHour, 'hours') .format('x'), diff --git a/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.ts b/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.ts index 263111c944da30..3389783a41ef0b 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/historical_summary_client.ts @@ -410,7 +410,7 @@ function getDateRange( queryRange: { from: moment(range.from) .subtract(timeWindow.duration.value, unit) - .startOf('day') + .startOf('minute') .toDate(), to: moment(range.to).startOf('minute').toDate(), }, @@ -420,14 +420,14 @@ function getDateRange( const now = moment(); return { range: { - from: now.clone().subtract(timeWindow.duration.value, unit).startOf('day').toDate(), + from: now.clone().subtract(timeWindow.duration.value, unit).startOf('minute').toDate(), to: now.clone().startOf('minute').toDate(), }, queryRange: { from: now .clone() .subtract(timeWindow.duration.value * 2, unit) - .startOf('day') + .startOf('minute') .toDate(), to: now.clone().startOf('minute').toDate(), }, diff --git a/x-pack/test/api_integration/apis/slos/fetch_historical_summary.ts b/x-pack/test/api_integration/apis/slos/fetch_historical_summary.ts index 94cccf1e149389..b8ca6a03b3d8e7 100644 --- a/x-pack/test/api_integration/apis/slos/fetch_historical_summary.ts +++ b/x-pack/test/api_integration/apis/slos/fetch_historical_summary.ts @@ -20,8 +20,8 @@ export default function ({ getService }: FtrProviderContext) { const sloApi = getService('slo'); const SLO_ID = 'slo-fake-1'; - // Failing: See https://github.com/elastic/kibana/issues/183750 - describe.skip('fetch historical summary', () => { + + describe('fetch historical summary', () => { before(async () => { const now = moment().startOf('minute'); const curr = now.clone().subtract(30, 'days'); @@ -81,7 +81,8 @@ export default function ({ getService }: FtrProviderContext) { }); expect(response[0].sloId).to.eql(SLO_ID); expect(response[0].instanceId).to.eql(ALL_VALUE); - expect(response[0].data).to.have.length(168); // 7 days * 24 hours/day * 1 bucket/hour + const numberOfBuckets = response[0].data.length; + expect(numberOfBuckets).to.be.within(168, 170); // 7 days * 24 hours/day * 1 bucket/hour + 2 extra bucket due to histogram agg rounding const last = response[0].data.pop(); expect(last?.errorBudget).to.eql({ consumed: 1, @@ -116,7 +117,8 @@ export default function ({ getService }: FtrProviderContext) { }); expect(response[0].sloId).to.eql(SLO_ID); expect(response[0].instanceId).to.eql(ALL_VALUE); - expect(response[0].data).to.have.length(168); // 7 days * 24 hours/day * 1 bucket/hour + const numberOfBuckets = response[0].data.length; + expect(numberOfBuckets).to.be.within(168, 170); // 7 days * 24 hours/day * 1 bucket/hour + 2 extra bucket due to histogram agg rounding const last = response[0].data.pop(); expect(last?.errorBudget).to.eql({ consumed: 0, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/slos/fetch_historical_summary.ts b/x-pack/test_serverless/api_integration/test_suites/observability/slos/fetch_historical_summary.ts index 32992e5a3b07b3..75d8ae3af1f3c0 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/slos/fetch_historical_summary.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/slos/fetch_historical_summary.ts @@ -82,7 +82,8 @@ export default function ({ getService }: FtrProviderContext) { }); expect(response[0].sloId).to.eql(SLO_ID); expect(response[0].instanceId).to.eql(ALL_VALUE); - expect(response[0].data).to.have.length(168); // 7 days * 24 hours/day * 1 bucket/hour + const numberOfBuckets = response[0].data.length; + expect(numberOfBuckets).to.be.within(168, 170); // 7 days * 24 hours/day * 1 bucket/hour + 2 extra bucket due to histogram agg rounding const last = response[0].data.pop(); expect(last?.errorBudget).to.eql({ consumed: 1, @@ -117,7 +118,8 @@ export default function ({ getService }: FtrProviderContext) { }); expect(response[0].sloId).to.eql(SLO_ID); expect(response[0].instanceId).to.eql(ALL_VALUE); - expect(response[0].data).to.have.length(168); // 7 days * 24 hours/day * 1 bucket/hour + const numberOfBuckets = response[0].data.length; + expect(numberOfBuckets).to.be.within(168, 170); // 7 days * 24 hours/day * 1 bucket/hour + 2 extra bucket due to histogram agg rounding const last = response[0].data.pop(); expect(last?.errorBudget).to.eql({ consumed: 0, From 56383ccdde5898ed8c9f60b0e766c3f6cf1f538a Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Tue, 21 May 2024 10:11:45 -0700 Subject: [PATCH 66/97] Use Data Stream for Reporting storage (#176022) ## Summary Closes https://github.com/elastic/kibana/issues/161608 * [X] Depends on https://github.com/elastic/elasticsearch/pull/97765 * [x] Depends on https://github.com/elastic/elasticsearch/pull/107581 * [x] Add create a new report job and check the details of the templated data stream. * [x] Run Discover tests in Flaky Test Runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5999 ## Release Note Reporting internal storage has been changed from using regular indices to a data stream configuration for a more efficient sharding strategy. This change is not expected to have any impact to users. ## Screenshots ### Upgrade test (manual process) Using a report generated before this change, and a report generated after "upgrading": ![image](https://github.com/elastic/kibana/assets/908371/f92193d8-70d6-4fa5-b1b7-8f6c1a0a5e9f) Even though the two reports are in different types storage, they are still managed by the same policy: ![image](https://github.com/elastic/kibana/assets/908371/9bd68d99-72ed-4cf0-bef9-55e644f039b7) Looking at the details of the policy shows how the different types of storage are used: ![image](https://github.com/elastic/kibana/assets/908371/6c0d1f80-97cb-4990-b2a8-45deab7528bc) ### Log lines Initial startup in clean environment ``` [2024-05-13T13:22:49.138-07:00][INFO ][plugins.reporting.store] Creating ILM policy for reporting data stream: kibana-reporting [2024-05-13T13:22:53.337-07:00][INFO ][plugins.reporting.store] Linking ILM policy to reporting data stream: .kibana-reporting, component template: kibana-reporting@custom ``` Kibana restart with ES running continuously ``` [2024-05-13T13:24:32.733-07:00][DEBUG][plugins.reporting.store] Found ILM policy kibana-reporting; skipping creation. [2024-05-13T13:24:32.733-07:00][INFO ][plugins.reporting.store] Linking ILM policy to reporting data stream: .kibana-reporting, component template: kibana-reporting@custom ``` ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed ~~See https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5302 (internal link)~~ --- docs/settings/reporting-settings.asciidoc | 4 +- docs/user/reporting/index.asciidoc | 7 +- docs/user/reporting/script-example.asciidoc | 2 +- packages/kbn-reporting/common/constants.ts | 1 + packages/kbn-reporting/common/types.ts | 1 + packages/kbn-reporting/common/url.ts | 6 - packages/kbn-reporting/server/constants.ts | 11 +- .../plugins/reporting/server/config/index.ts | 1 + .../reporting/server/deprecations/index.ts | 2 +- ...igrate_existing_indices_ilm_policy.test.ts | 18 +-- .../migrate_existing_indices_ilm_policy.ts | 28 ++--- .../server/lib/content_stream.test.ts | 24 +++- .../reporting/server/lib/content_stream.ts | 29 +++-- .../check_ilm_migration_status.ts | 37 ------ .../server/lib/deprecations/index.ts | 2 - .../server/lib/deprecations/types.ts | 2 - .../lib/store/ilm_policy_manager/constants.ts | 18 --- .../ilm_policy_manager/ilm_policy_manager.ts | 98 ++++++++++++++- .../lib/store/ilm_policy_manager/index.ts | 1 - .../reporting/server/lib/store/mapping.ts | 93 --------------- .../reporting/server/lib/store/report.test.ts | 3 + .../reporting/server/lib/store/report.ts | 7 +- .../reporting/server/lib/store/store.test.ts | 76 +----------- .../reporting/server/lib/store/store.ts | 112 ++++-------------- .../server/routes/common/jobs/jobs_query.ts | 20 ++-- .../internal/deprecations/deprecations.ts | 59 ++++----- .../functional/apps/discover/reporting.ts | 6 +- .../reporting_and_security/datastream.ts | 67 +++++++++++ .../ilm_migration_apis.ts | 3 +- .../reporting_and_security/index.ts | 1 + .../services}/index_timestamp.ts | 0 .../services/scenarios.ts | 15 ++- .../services/usage.ts | 3 +- x-pack/test/tsconfig.json | 1 + .../common/reporting/datastream.ts | 84 +++++++++++++ .../common/reporting/generate_csv_discover.ts | 4 +- .../test_suites/common/reporting/index.ts | 1 + .../common/discover/x_pack/reporting.ts | 6 +- 38 files changed, 409 insertions(+), 444 deletions(-) delete mode 100644 x-pack/plugins/reporting/server/lib/deprecations/check_ilm_migration_status.ts delete mode 100644 x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/constants.ts delete mode 100644 x-pack/plugins/reporting/server/lib/store/mapping.ts create mode 100644 x-pack/test/reporting_api_integration/reporting_and_security/datastream.ts rename x-pack/{plugins/reporting/server/lib/store => test/reporting_api_integration/services}/index_timestamp.ts (100%) create mode 100644 x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts diff --git a/docs/settings/reporting-settings.asciidoc b/docs/settings/reporting-settings.asciidoc index e19065a533adce..f871f72db22c0a 100644 --- a/docs/settings/reporting-settings.asciidoc +++ b/docs/settings/reporting-settings.asciidoc @@ -70,7 +70,9 @@ reports, you might need to change the following settings. If capturing a report fails for any reason, {kib} will re-queue the report job for retry, as many times as this setting. Defaults to `3`. `xpack.reporting.queue.indexInterval`:: -How often the index that stores reporting jobs rolls over to a new index. Valid values are `year`, `month`, `week`, `day`, and `hour`. Defaults to `week`. +deprecated:[8.15.0,This setting has no effect.] How often Reporting creates a new index to store report jobs and file contents. +Valid values are `year`, `month`, `week`, `day`, and `hour`. Defaults to `week`. +*NOTE*: This setting exists for backwards compatibility, but is unused. Use the built-in ILM policy provided for the reporting plugin to customize the rollover of Reporting data. [[xpack-reportingQueue-pollEnabled]] `xpack.reporting.queue.pollEnabled` :: When `true`, enables the {kib} instance to poll {es} for pending jobs and claim them for diff --git a/docs/user/reporting/index.asciidoc b/docs/user/reporting/index.asciidoc index 318a901b15e4cd..338b2bc53a55a9 100644 --- a/docs/user/reporting/index.asciidoc +++ b/docs/user/reporting/index.asciidoc @@ -67,10 +67,9 @@ NOTE: When you create a dashboard report that includes a data table or saved sea . To view and manage reports, open the main menu, then click *Stack Management > Reporting*. -NOTE: Reports are stored in {es} and managed by the `kibana-reporting` {ilm} -({ilm-init}) policy. By default, the policy stores reports forever. To learn -more about {ilm-init} policies, refer to the {es} -{ref}/index-lifecycle-management.html[{ilm-init} documentation]. +NOTE: In "stateful" deployments, reports are stored in {es} and managed by the `kibana-reporting` {ilm} +({ilm-init}) policy. By default, the policy stores reports forever. To learn more about {ilm-init} policies, refer +to the {es} {ref}/index-lifecycle-management.html[{ilm-init} documentation]. [float] [[csv-limitations]] diff --git a/docs/user/reporting/script-example.asciidoc b/docs/user/reporting/script-example.asciidoc index 937e140bd67a01..5445058ead03b1 100644 --- a/docs/user/reporting/script-example.asciidoc +++ b/docs/user/reporting/script-example.asciidoc @@ -36,4 +36,4 @@ An example response for a successfully queued report: --------------------------------------------------------- <1> The relative path on the {kib} host for downloading the report. -<2> (Not included in the example) Internal representation of the reporting job, as found in the `.reporting-*` index. +<2> (Not included in the example) Internal representation of the reporting job, as found in the `.reporting-*` storage. diff --git a/packages/kbn-reporting/common/constants.ts b/packages/kbn-reporting/common/constants.ts index 4620b46e8cab62..e0412913234395 100644 --- a/packages/kbn-reporting/common/constants.ts +++ b/packages/kbn-reporting/common/constants.ts @@ -55,6 +55,7 @@ export const REPORTING_MANAGEMENT_HOME = '/app/management/insightsAndAlerting/re * ILM */ +// The ILM policy manages stored reports only in stateful deployments. export const ILM_POLICY_NAME = 'kibana-reporting'; /* diff --git a/packages/kbn-reporting/common/types.ts b/packages/kbn-reporting/common/types.ts index 92eb4448805438..39d5a79e731c6a 100644 --- a/packages/kbn-reporting/common/types.ts +++ b/packages/kbn-reporting/common/types.ts @@ -149,6 +149,7 @@ export interface ReportSource { migration_version: string; // for reminding the user to update their POST URL attempts: number; // initially populated as 0 created_at: string; // timestamp in UTC + '@timestamp'?: string; // creation timestamp, only used for data streams compatibility status: JOB_STATUS; /* diff --git a/packages/kbn-reporting/common/url.ts b/packages/kbn-reporting/common/url.ts index 14772b3a612aa3..d7140bbd22044f 100644 --- a/packages/kbn-reporting/common/url.ts +++ b/packages/kbn-reporting/common/url.ts @@ -29,12 +29,6 @@ export interface LocatorParams

= { }, schema: ConfigSchema, deprecations: ({ unused }) => [ + unused('queue.indexInterval', { level: 'warning' }), // unused since 8.15 unused('capture.browser.chromium.maxScreenshotDimension', { level: 'warning' }), // unused since 7.8 unused('capture.browser.type', { level: 'warning' }), unused('poll.jobCompletionNotifier.intervalErrorMultiplier', { level: 'warning' }), // unused since 7.10 diff --git a/x-pack/plugins/reporting/server/deprecations/index.ts b/x-pack/plugins/reporting/server/deprecations/index.ts index 651defbb5d6881..bca439532b3b09 100644 --- a/x-pack/plugins/reporting/server/deprecations/index.ts +++ b/x-pack/plugins/reporting/server/deprecations/index.ts @@ -20,7 +20,7 @@ export const registerDeprecations = ({ core.deprecations.registerDeprecations({ getDeprecations: async (ctx) => { return [ - ...(await getIlmPolicyDeprecationsInfo(ctx, { reportingCore })), + ...(await getIlmPolicyDeprecationsInfo(ctx)), ...(await getReportingRoleDeprecationsInfo(ctx, { reportingCore })), ]; }, diff --git a/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.test.ts b/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.test.ts index 9f0a10b861adb9..233626d1b7b4c3 100644 --- a/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.test.ts +++ b/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.test.ts @@ -7,10 +7,6 @@ import type { GetDeprecationsContext } from '@kbn/core/server'; import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { createMockConfigSchema } from '@kbn/reporting-mocks-server'; - -import { ReportingCore } from '../core'; -import { createMockReportingCore } from '../test_helpers'; import { getDeprecationsInfo } from './migrate_existing_indices_ilm_policy'; @@ -21,12 +17,10 @@ type ScopedClusterClientMock = ReturnType< describe("Migrate existing indices' ILM policy deprecations", () => { let esClient: ScopedClusterClientMock; let deprecationsCtx: GetDeprecationsContext; - let reportingCore: ReportingCore; beforeEach(async () => { esClient = elasticsearchServiceMock.createScopedClusterClient(); deprecationsCtx = { esClient, savedObjectsClient: savedObjectsClientMock.create() }; - reportingCore = await createMockReportingCore(createMockConfigSchema()); }); const createIndexSettings = (lifecycleName: string) => ({ @@ -47,7 +41,7 @@ describe("Migrate existing indices' ILM policy deprecations", () => { indexB: createIndexSettings('kibana-reporting'), }); - expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot(` + expect(await getDeprecationsInfo(deprecationsCtx)).toMatchInlineSnapshot(` Array [ Object { "correctiveActions": Object { @@ -60,7 +54,7 @@ describe("Migrate existing indices' ILM policy deprecations", () => { ], }, "level": "warning", - "message": "New reporting indices will be managed by the \\"kibana-reporting\\" provisioned ILM policy. You must edit this policy to manage the report lifecycle. This change targets all indices prefixed with \\".reporting-*\\".", + "message": "New reporting indices will be managed by the \\"kibana-reporting\\" provisioned ILM policy. You must edit this policy to manage the report lifecycle. This change targets the hidden system index pattern \\".kibana-reporting*\\".", "title": "Found reporting indices managed by custom ILM policy.", }, ] @@ -73,14 +67,10 @@ describe("Migrate existing indices' ILM policy deprecations", () => { indexB: createIndexSettings('kibana-reporting'), }); - expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot( - `Array []` - ); + expect(await getDeprecationsInfo(deprecationsCtx)).toMatchInlineSnapshot(`Array []`); esClient.asInternalUser.indices.getSettings.mockResponse({}); - expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot( - `Array []` - ); + expect(await getDeprecationsInfo(deprecationsCtx)).toMatchInlineSnapshot(`Array []`); }); }); diff --git a/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.ts b/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.ts index 2fcba6c0ccf530..fce6e6475d76ea 100644 --- a/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.ts +++ b/x-pack/plugins/reporting/server/deprecations/migrate_existing_indices_ilm_policy.ts @@ -8,24 +8,14 @@ import { DeprecationsDetails, GetDeprecationsContext } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { ILM_POLICY_NAME, INTERNAL_ROUTES } from '@kbn/reporting-common'; -import { ReportingCore } from '../core'; -import { deprecations } from '../lib/deprecations'; +import { REPORTING_DATA_STREAM_WILDCARD } from '@kbn/reporting-server'; +import { IlmPolicyManager } from '../lib/store'; -interface ExtraDependencies { - reportingCore: ReportingCore; -} - -export const getDeprecationsInfo = async ( - { esClient }: GetDeprecationsContext, - { reportingCore }: ExtraDependencies -): Promise => { - const store = await reportingCore.getStore(); - const indexPattern = store.getReportingIndexPattern(); - - const migrationStatus = await deprecations.checkIlmMigrationStatus({ - reportingCore, - elasticsearchClient: esClient.asInternalUser, - }); +export const getDeprecationsInfo = async ({ + esClient, +}: GetDeprecationsContext): Promise => { + const ilmPolicyManager = IlmPolicyManager.create({ client: esClient.asInternalUser }); + const migrationStatus = await ilmPolicyManager.checkIlmMigrationStatus(); if (migrationStatus !== 'ok') { return [ @@ -35,10 +25,10 @@ export const getDeprecationsInfo = async ( }), level: 'warning', message: i18n.translate('xpack.reporting.deprecations.migrateIndexIlmPolicyActionMessage', { - defaultMessage: `New reporting indices will be managed by the "{reportingIlmPolicy}" provisioned ILM policy. You must edit this policy to manage the report lifecycle. This change targets all indices prefixed with "{indexPattern}".`, + defaultMessage: `New reporting indices will be managed by the "{reportingIlmPolicy}" provisioned ILM policy. You must edit this policy to manage the report lifecycle. This change targets the hidden system index pattern "{indexPattern}".`, values: { reportingIlmPolicy: ILM_POLICY_NAME, - indexPattern, + indexPattern: REPORTING_DATA_STREAM_WILDCARD, }, }), correctiveActions: { diff --git a/x-pack/plugins/reporting/server/lib/content_stream.test.ts b/x-pack/plugins/reporting/server/lib/content_stream.test.ts index d4f179c5c9359e..165c06baa579b1 100644 --- a/x-pack/plugins/reporting/server/lib/content_stream.test.ts +++ b/x-pack/plugins/reporting/server/lib/content_stream.test.ts @@ -122,12 +122,12 @@ describe('ContentStream', () => { 'body.query.constant_score.filter.bool.must.0.term._id', 'something' ); - expect(request2).toHaveProperty('index', 'somewhere'); + expect(request2).toHaveProperty('index', '.reporting-*,.kibana-reporting*'); expect(request2).toHaveProperty( 'body.query.constant_score.filter.bool.must.0.term.parent_id', 'something' ); - expect(request3).toHaveProperty('index', 'somewhere'); + expect(request3).toHaveProperty('index', '.reporting-*,.kibana-reporting*'); expect(request3).toHaveProperty( 'body.query.constant_score.filter.bool.must.0.term.parent_id', 'something' @@ -293,8 +293,11 @@ describe('ContentStream', () => { 1, expect.objectContaining({ id: expect.any(String), - index: 'somewhere', + index: '.kibana-reporting', + op_type: 'create', + refresh: 'wait_for', body: { + '@timestamp': '1970-01-01T00:00:00.000Z', parent_id: 'something', output: { content: '34', @@ -307,8 +310,11 @@ describe('ContentStream', () => { 2, expect.objectContaining({ id: expect.any(String), - index: 'somewhere', + index: '.kibana-reporting', + op_type: 'create', + refresh: 'wait_for', body: { + '@timestamp': '1970-01-01T00:00:00.000Z', parent_id: 'something', output: { content: '56', @@ -335,9 +341,12 @@ describe('ContentStream', () => { 1, expect.objectContaining({ id: expect.any(String), - index: 'somewhere', + index: '.kibana-reporting', + op_type: 'create', + refresh: 'wait_for', body: { parent_id: 'something', + '@timestamp': '1970-01-01T00:00:00.000Z', output: { content: Buffer.from('456').toString('base64'), chunk: 1, @@ -349,9 +358,12 @@ describe('ContentStream', () => { 2, expect.objectContaining({ id: expect.any(String), - index: 'somewhere', + index: '.kibana-reporting', + op_type: 'create', + refresh: 'wait_for', body: { parent_id: 'something', + '@timestamp': '1970-01-01T00:00:00.000Z', output: { content: Buffer.from('78').toString('base64'), chunk: 2, diff --git a/x-pack/plugins/reporting/server/lib/content_stream.ts b/x-pack/plugins/reporting/server/lib/content_stream.ts index 17362516d2c9df..b3c113dd43c3bd 100644 --- a/x-pack/plugins/reporting/server/lib/content_stream.ts +++ b/x-pack/plugins/reporting/server/lib/content_stream.ts @@ -8,9 +8,13 @@ import { Duplex } from 'stream'; import { v4 as uuidv4 } from 'uuid'; -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { estypes } from '@elastic/elasticsearch'; import type { ElasticsearchClient, Logger } from '@kbn/core/server'; import type { ReportSource } from '@kbn/reporting-common/types'; +import { + REPORTING_DATA_STREAM_ALIAS, + REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY, +} from '@kbn/reporting-server'; import type { ReportingCore } from '..'; const ONE_MB = 1024 * 1024; @@ -31,6 +35,7 @@ interface ChunkOutput { } interface ChunkSource { + '@timestamp': string; parent_id: string; output: ChunkOutput; } @@ -90,7 +95,7 @@ export class ContentStream extends Duplex { private async readHead() { const { id, index } = this.document; - const body: SearchRequest['body'] = { + const body: SearchRequest = { _source: { includes: ['output.content', 'output.size', 'jobtype'] }, query: { constant_score: { @@ -110,13 +115,14 @@ export class ContentStream extends Duplex { const hits = response?.hits?.hits?.[0]; this.jobSize = hits?._source?.output?.size; + this.logger.debug(`Reading job of size ${this.jobSize}`); return hits?._source?.output?.content; } private async readChunk() { - const { id, index } = this.document; - const body: SearchRequest['body'] = { + const { id } = this.document; + const body: SearchRequest = { _source: { includes: ['output.content'] }, query: { constant_score: { @@ -132,7 +138,10 @@ export class ContentStream extends Duplex { this.logger.debug(`Reading chunk #${this.chunksRead}.`); - const response = await this.client.search({ body, index }); + const response = await this.client.search({ + body, + index: REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY, + }); const hits = response?.hits?.hits?.[0]; return hits?._source?.output.content; @@ -179,10 +188,11 @@ export class ContentStream extends Duplex { } private async writeHead(content: string) { - this.logger.debug(`Updating report contents.`); + this.logger.debug(`Updating chunk #0 (${this.document.id}).`); const body = await this.client.update({ ...this.document, + refresh: 'wait_for', body: { doc: { output: { content }, @@ -194,16 +204,19 @@ export class ContentStream extends Duplex { } private async writeChunk(content: string) { - const { id: parentId, index } = this.document; + const { id: parentId } = this.document; const id = uuidv4(); this.logger.debug(`Writing chunk #${this.chunksWritten} (${id}).`); await this.client.index({ id, - index, + index: REPORTING_DATA_STREAM_ALIAS, + refresh: 'wait_for', + op_type: 'create', body: { parent_id: parentId, + '@timestamp': new Date(0).toISOString(), // required for data streams compatibility output: { content, chunk: this.chunksWritten, diff --git a/x-pack/plugins/reporting/server/lib/deprecations/check_ilm_migration_status.ts b/x-pack/plugins/reporting/server/lib/deprecations/check_ilm_migration_status.ts deleted file mode 100644 index aab4c1f0cecf4c..00000000000000 --- a/x-pack/plugins/reporting/server/lib/deprecations/check_ilm_migration_status.ts +++ /dev/null @@ -1,37 +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 { IlmPolicyMigrationStatus } from '@kbn/reporting-common/url'; -import { ILM_POLICY_NAME } from '@kbn/reporting-common'; -import { IlmPolicyManager } from '../store/ilm_policy_manager'; -import type { DeprecationsDependencies } from './types'; - -export const checkIlmMigrationStatus = async ({ - reportingCore, - elasticsearchClient, -}: DeprecationsDependencies): Promise => { - const ilmPolicyManager = IlmPolicyManager.create({ client: elasticsearchClient }); - if (!(await ilmPolicyManager.doesIlmPolicyExist())) { - return 'policy-not-found'; - } - - const store = await reportingCore.getStore(); - const indexPattern = store.getReportingIndexPattern(); - - const reportingIndicesSettings = await elasticsearchClient.indices.getSettings({ - index: indexPattern, - }); - - const hasUnmanagedIndices = Object.values(reportingIndicesSettings).some((settings) => { - return ( - settings?.settings?.index?.lifecycle?.name !== ILM_POLICY_NAME && - settings?.settings?.['index.lifecycle']?.name !== ILM_POLICY_NAME - ); - }); - - return hasUnmanagedIndices ? 'indices-not-managed-by-policy' : 'ok'; -}; diff --git a/x-pack/plugins/reporting/server/lib/deprecations/index.ts b/x-pack/plugins/reporting/server/lib/deprecations/index.ts index 2ddc46663600f2..a4d1ee919e1ccc 100644 --- a/x-pack/plugins/reporting/server/lib/deprecations/index.ts +++ b/x-pack/plugins/reporting/server/lib/deprecations/index.ts @@ -9,7 +9,6 @@ import { errors } from '@elastic/elasticsearch'; import Boom from '@hapi/boom'; import { i18n } from '@kbn/i18n'; import { DeprecationsDetails, DocLinksServiceSetup } from '@kbn/core/server'; -import { checkIlmMigrationStatus } from './check_ilm_migration_status'; function deprecationError( title: string, @@ -83,7 +82,6 @@ function getDetailedErrorMessage(error: any): string { } export const deprecations = { - checkIlmMigrationStatus, deprecationError, getDetailedErrorMessage, getErrorStatusCode, diff --git a/x-pack/plugins/reporting/server/lib/deprecations/types.ts b/x-pack/plugins/reporting/server/lib/deprecations/types.ts index 6df429d2b2ed99..5f572f89911efa 100644 --- a/x-pack/plugins/reporting/server/lib/deprecations/types.ts +++ b/x-pack/plugins/reporting/server/lib/deprecations/types.ts @@ -6,9 +6,7 @@ */ import type { ElasticsearchClient } from '@kbn/core/server'; -import type { ReportingCore } from '../../core'; export interface DeprecationsDependencies { - reportingCore: ReportingCore; elasticsearchClient: ElasticsearchClient; } diff --git a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/constants.ts b/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/constants.ts deleted file mode 100644 index cbbf21094d61f1..00000000000000 --- a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/constants.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { IlmPutLifecycleRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; - -export const reportingIlmPolicy: IlmPutLifecycleRequest['body'] = { - policy: { - phases: { - hot: { - actions: {}, - }, - }, - }, -}; diff --git a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/ilm_policy_manager.ts b/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/ilm_policy_manager.ts index 90bda652898f3c..950d6ea5e84c6d 100644 --- a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/ilm_policy_manager.ts +++ b/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/ilm_policy_manager.ts @@ -5,12 +5,19 @@ * 2.0. */ +import type { estypes } from '@elastic/elasticsearch'; import type { ElasticsearchClient } from '@kbn/core/server'; import { ILM_POLICY_NAME } from '@kbn/reporting-common'; -import { reportingIlmPolicy } from './constants'; +import { IlmPolicyMigrationStatus } from '@kbn/reporting-common/types'; +import { + REPORTING_DATA_STREAM_ALIAS, + REPORTING_DATA_STREAM_COMPONENT_TEMPLATE, + REPORTING_DATA_STREAM_WILDCARD, + REPORTING_LEGACY_INDICES, +} from '@kbn/reporting-server'; /** - * Responsible for detecting and provisioning the reporting ILM policy. + * Responsible for detecting and provisioning the reporting ILM policy in stateful deployments. * * Uses the provided {@link ElasticsearchClient} to scope request privileges. */ @@ -21,6 +28,9 @@ export class IlmPolicyManager { return new IlmPolicyManager(opts.client); } + /** + * Check that the ILM policy exists + */ public async doesIlmPolicyExist(): Promise { try { await this.client.ilm.getLifecycle({ name: ILM_POLICY_NAME }); @@ -33,13 +43,95 @@ export class IlmPolicyManager { } } + /** + * This method is automatically called on the Stack Management > Reporting page, by the `` API for users with + * privilege to manage ILM, to notify them when attention is needed to update the policy for any reason. + */ + public async checkIlmMigrationStatus(): Promise { + if (!(await this.doesIlmPolicyExist())) { + return 'policy-not-found'; + } + + const [reportingDataStreamSettings, reportingLegacyIndexSettings] = await Promise.all([ + this.client.indices.getSettings({ + index: REPORTING_DATA_STREAM_WILDCARD, + }), + this.client.indices.getSettings({ + index: REPORTING_LEGACY_INDICES, + }), + ]); + + const hasUnmanaged = (settings: estypes.IndicesIndexState) => { + return ( + settings?.settings?.index?.lifecycle?.name !== ILM_POLICY_NAME && + settings?.settings?.['index.lifecycle']?.name !== ILM_POLICY_NAME + ); + }; + + const hasUnmanagedDataStream = Object.values(reportingDataStreamSettings).some(hasUnmanaged); + const hasUnmanagedIndices = Object.values(reportingLegacyIndexSettings).some(hasUnmanaged); + + return hasUnmanagedDataStream || hasUnmanagedIndices ? 'indices-not-managed-by-policy' : 'ok'; + } + /** * Create the Reporting ILM policy */ public async createIlmPolicy(): Promise { await this.client.ilm.putLifecycle({ name: ILM_POLICY_NAME, - body: reportingIlmPolicy, + policy: { phases: { hot: { actions: {} } } }, + }); + } + + /** + * Update the Data Stream index template with a link to the Reporting ILM policy + */ + public async linkIlmPolicy() { + const putTemplateAcknowledged = await this.client.cluster.putComponentTemplate({ + name: REPORTING_DATA_STREAM_COMPONENT_TEMPLATE, + template: { settings: { lifecycle: { name: ILM_POLICY_NAME } } }, + create: false, + }); + + let backingIndicesAcknowledged: { acknowledged: boolean | null } = { acknowledged: null }; + const backingIndicesExist = await this.client.indices.exists({ + index: REPORTING_DATA_STREAM_ALIAS, + expand_wildcards: ['hidden'], + }); + if (backingIndicesExist) { + backingIndicesAcknowledged = await this.client.indices.putSettings({ + index: REPORTING_DATA_STREAM_ALIAS, + settings: { lifecycle: { name: ILM_POLICY_NAME } }, + }); + } + + return { putTemplateResponse: putTemplateAcknowledged, backingIndicesAcknowledged }; + } + + /** + * Update datastream to use ILM policy. If legacy indices exist, this attempts to link + * the ILM policy to them as well. + */ + public async migrateIndicesToIlmPolicy() { + const { + putTemplateResponse: { acknowledged: putTemplateAcknowledged }, + backingIndicesAcknowledged: { acknowledged: backingIndicesAcknowledged }, + } = await this.linkIlmPolicy(); + + let legacyAcknowledged: boolean | null = null; + const legacyExists = await this.client.indices.exists({ + index: REPORTING_LEGACY_INDICES, + expand_wildcards: ['hidden'], }); + if (legacyExists) { + const { acknowledged } = await this.client.indices.putSettings({ + index: REPORTING_LEGACY_INDICES, + settings: { lifecycle: { name: ILM_POLICY_NAME } }, + }); + legacyAcknowledged = acknowledged; + } + + return { putTemplateAcknowledged, backingIndicesAcknowledged, legacyAcknowledged }; } } diff --git a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/index.ts b/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/index.ts index 045a9ecb59997d..a10b1dbb261510 100644 --- a/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/index.ts +++ b/x-pack/plugins/reporting/server/lib/store/ilm_policy_manager/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export { reportingIlmPolicy } from './constants'; export { IlmPolicyManager } from './ilm_policy_manager'; diff --git a/x-pack/plugins/reporting/server/lib/store/mapping.ts b/x-pack/plugins/reporting/server/lib/store/mapping.ts deleted file mode 100644 index 9accfd0c751846..00000000000000 --- a/x-pack/plugins/reporting/server/lib/store/mapping.ts +++ /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. - */ - -export const mapping = { - meta: { - // We are indexing these properties with both text and keyword fields - // because that's what will be auto generated when an index already exists. - properties: { - // ID of the app this report: search, visualization or dashboard, etc - objectType: { - type: 'text', - fields: { - keyword: { - type: 'keyword', - ignore_above: 256, - }, - }, - }, - layout: { - type: 'text', - fields: { - keyword: { - type: 'keyword', - ignore_above: 256, - }, - }, - }, - isDeprecated: { - type: 'boolean', - }, - }, - }, - migration_version: { type: 'keyword' }, // new field (7.14) to distinguish reports that were scheduled with Task Manager - jobtype: { type: 'keyword' }, - payload: { type: 'object', enabled: false }, - priority: { type: 'byte' }, // TODO: remove: this is unused - timeout: { type: 'long' }, - process_expiration: { type: 'date' }, - created_by: { type: 'keyword' }, // `null` if security is disabled - created_at: { type: 'date' }, - started_at: { type: 'date' }, - completed_at: { type: 'date' }, - attempts: { type: 'short' }, - max_attempts: { type: 'short' }, - kibana_name: { type: 'keyword' }, - kibana_id: { type: 'keyword' }, - status: { type: 'keyword' }, - parent_id: { type: 'keyword' }, - output: { - type: 'object', - properties: { - error_code: { type: 'keyword' }, - chunk: { type: 'long' }, - content_type: { type: 'keyword' }, - size: { type: 'long' }, - content: { type: 'object', enabled: false }, - }, - }, - metrics: { - type: 'object', - properties: { - csv: { - type: 'object', - properties: { - rows: { type: 'long' }, - }, - }, - pdf: { - type: 'object', - properties: { - pages: { type: 'long' }, - cpu: { type: 'double' }, - cpuInPercentage: { type: 'double' }, - memory: { type: 'long' }, - memoryInMegabytes: { type: 'double' }, - }, - }, - png: { - type: 'object', - properties: { - cpu: { type: 'double' }, - cpuInPercentage: { type: 'double' }, - memory: { type: 'long' }, - memoryInMegabytes: { type: 'double' }, - }, - }, - }, - }, -} as const; diff --git a/x-pack/plugins/reporting/server/lib/store/report.test.ts b/x-pack/plugins/reporting/server/lib/store/report.test.ts index f6cbbade4df7ba..ca1294f663da84 100644 --- a/x-pack/plugins/reporting/server/lib/store/report.test.ts +++ b/x-pack/plugins/reporting/server/lib/store/report.test.ts @@ -124,6 +124,9 @@ describe('Class Report', () => { it('throws error if converted to task JSON before being synced with ES storage', () => { const report = new Report({ jobtype: 'spam', payload: {} } as any); + // @ts-ignore null is not applicable to string + report._index = null; + expect(() => report.updateWithEsDoc(report)).toThrowErrorMatchingInlineSnapshot( `"Report object from ES has missing fields!"` ); diff --git a/x-pack/plugins/reporting/server/lib/store/report.ts b/x-pack/plugins/reporting/server/lib/store/report.ts index e62f4f2f20b58c..6eb0960aedd931 100644 --- a/x-pack/plugins/reporting/server/lib/store/report.ts +++ b/x-pack/plugins/reporting/server/lib/store/report.ts @@ -10,6 +10,7 @@ import moment from 'moment'; import { v4 as uuidv4 } from 'uuid'; import { JOB_STATUS } from '@kbn/reporting-common'; +import { REPORTING_DATA_STREAM_ALIAS } from '@kbn/reporting-server'; import { ReportApiJSON, ReportDocumentHead, @@ -25,7 +26,7 @@ export const MIGRATION_VERSION = '7.14.0'; * Class for an ephemeral report document: possibly is not saved in Elasticsearch */ export class Report implements Partial { - public _index?: string; + public _index: string; public _id: string; public _primary_term?: number; // set by ES public _seq_no?: number; // set by ES @@ -63,7 +64,7 @@ export class Report implements Partial { */ constructor(opts: Partial & Partial, fields?: ReportFields) { this._id = opts._id != null ? opts._id : uuidv4(); - this._index = opts._index; + this._index = opts._index ?? REPORTING_DATA_STREAM_ALIAS; // Sets the value to the data stream, unless it's a stored report and we know the name of the backing index this._primary_term = opts._primary_term; this._seq_no = opts._seq_no; @@ -167,7 +168,7 @@ export class Report implements Partial { toApiJSON(): ReportApiJSON { return { id: this._id, - index: this._index!, + index: this._index ?? REPORTING_DATA_STREAM_ALIAS, kibana_name: this.kibana_name, kibana_id: this.kibana_id, jobtype: this.jobtype, diff --git a/x-pack/plugins/reporting/server/lib/store/store.test.ts b/x-pack/plugins/reporting/server/lib/store/store.test.ts index 946ceb4f105b05..826e13c0ac6960 100644 --- a/x-pack/plugins/reporting/server/lib/store/store.test.ts +++ b/x-pack/plugins/reporting/server/lib/store/store.test.ts @@ -80,70 +80,6 @@ describe('ReportingStore', () => { ); }); - it('handles error creating the index', async () => { - // setup - mockEsClient.indices.exists.mockResponse(false); - mockEsClient.indices.create.mockRejectedValue(new Error('horrible error')); - - const store = new ReportingStore(mockCore, mockLogger); - const mockReport = new Report({ - _index: '.reporting-errortest', - jobtype: 'unknowntype', - payload: {}, - meta: {}, - } as any); - await expect(store.addReport(mockReport)).rejects.toMatchInlineSnapshot( - `[Error: horrible error]` - ); - }); - - /* Creating the index will fail, if there were multiple jobs staged in - * parallel and creation completed from another Kibana instance. Only the - * first request in line can successfully create it. - * In spite of that race condition, adding the new job in Elasticsearch is - * fine. - */ - it('ignores index creation error if the index already exists and continues adding the report', async () => { - // setup - mockEsClient.indices.exists.mockResponse(false); - mockEsClient.indices.create.mockRejectedValue(new Error('devastating error')); - - const store = new ReportingStore(mockCore, mockLogger); - const mockReport = new Report({ - _index: '.reporting-mock', - jobtype: 'unknowntype', - payload: {}, - meta: {}, - } as any); - await expect(store.addReport(mockReport)).rejects.toMatchInlineSnapshot( - `[Error: devastating error]` - ); - }); - - it('skips creating the index if already exists', async () => { - // setup - mockEsClient.indices.exists.mockResponse(false); - // will be triggered but ignored - mockEsClient.indices.create.mockRejectedValue(new Error('resource_already_exists_exception')); - - const store = new ReportingStore(mockCore, mockLogger); - const mockReport = new Report({ - created_by: 'user1', - jobtype: 'unknowntype', - payload: {}, - meta: {}, - } as any); - await expect(store.addReport(mockReport)).resolves.toMatchObject({ - _primary_term: undefined, - _seq_no: undefined, - attempts: 0, - created_by: 'user1', - jobtype: 'unknowntype', - payload: {}, - status: 'pending', - }); - }); - it('allows username string to be `false`', async () => { // setup mockEsClient.indices.exists.mockResponse(false); @@ -426,16 +362,14 @@ describe('ReportingStore', () => { expect(mockEsClient.ilm.getLifecycle).toHaveBeenCalledWith({ name: 'kibana-reporting' }); expect(mockEsClient.ilm.putLifecycle.mock.calls[0][0]).toMatchInlineSnapshot(` Object { - "body": Object { - "policy": Object { - "phases": Object { - "hot": Object { - "actions": Object {}, - }, + "name": "kibana-reporting", + "policy": Object { + "phases": Object { + "hot": Object { + "actions": Object {}, }, }, }, - "name": "kibana-reporting", } `); }); diff --git a/x-pack/plugins/reporting/server/lib/store/store.ts b/x-pack/plugins/reporting/server/lib/store/store.ts index 543045393a1b24..648230113780d2 100644 --- a/x-pack/plugins/reporting/server/lib/store/store.ts +++ b/x-pack/plugins/reporting/server/lib/store/store.ts @@ -14,15 +14,16 @@ import type { ReportOutput, ReportSource, } from '@kbn/reporting-common/types'; -import { REPORTING_SYSTEM_INDEX } from '@kbn/reporting-server'; +import { + REPORTING_DATA_STREAM_ALIAS, + REPORTING_DATA_STREAM_COMPONENT_TEMPLATE, +} from '@kbn/reporting-server'; import moment from 'moment'; import type { Report } from '.'; import { SavedReport } from '.'; import type { ReportingCore } from '../..'; import type { ReportTaskParams } from '../tasks'; import { IlmPolicyManager } from './ilm_policy_manager'; -import { indexTimestamp } from './index_timestamp'; -import { mapping } from './mapping'; import { MIGRATION_VERSION } from './report'; type UpdateResponse = estypes.UpdateResponse; @@ -71,6 +72,7 @@ const sourceDoc = (doc: Partial): Partial => { return { ...doc, migration_version: MIGRATION_VERSION, + '@timestamp': new Date(0).toISOString(), // required for data streams compatibility }; }; @@ -103,16 +105,9 @@ const jobDebugMessage = (report: Report) => * - interface for downloading the report */ export class ReportingStore { - private readonly indexPrefix: string; // config setting of index prefix in system index name - private readonly indexInterval: string; // config setting of index prefix: how often to poll for pending work private client?: ElasticsearchClient; - config: ReportingCore['config']; constructor(private reportingCore: ReportingCore, private logger: Logger) { - this.config = reportingCore.getConfig(); - - this.indexPrefix = REPORTING_SYSTEM_INDEX; - this.indexInterval = this.config.queue.indexInterval; this.logger = logger.get('store'); } @@ -124,62 +119,28 @@ export class ReportingStore { return this.client; } - private async getIlmPolicyManager() { - const client = await this.getClient(); - return IlmPolicyManager.create({ client }); - } - - private async createIndex(indexName: string) { + private async createIlmPolicy() { const client = await this.getClient(); - const exists = await client.indices.exists({ index: indexName }); - - if (exists) { - return exists; + const ilmPolicyManager = IlmPolicyManager.create({ client }); + if (await ilmPolicyManager.doesIlmPolicyExist()) { + this.logger.debug(`Found ILM policy ${ILM_POLICY_NAME}; skipping creation.`); + } else { + this.logger.info(`Creating ILM policy for reporting data stream: ${ILM_POLICY_NAME}`); + await ilmPolicyManager.createIlmPolicy(); } - const indexSettings = this.config.statefulSettings.enabled - ? { - settings: { - number_of_shards: 1, - auto_expand_replicas: '0-1', - lifecycle: { - name: ILM_POLICY_NAME, - }, - }, - } - : {}; - - try { - await client.indices.create({ - index: indexName, - body: { - ...indexSettings, - mappings: { - properties: mapping, - }, - }, - }); - - return true; - } catch (error) { - const isIndexExistsError = error.message.match(/resource_already_exists_exception/); - if (isIndexExistsError) { - // Do not fail a job if the job runner hits the race condition. - this.logger.warn(`Automatic index creation failed: index already exists: ${error}`); - return; - } - - this.logger.error(error); - - throw error; - } + this.logger.info( + `Linking ILM policy to reporting data stream: ${REPORTING_DATA_STREAM_ALIAS}, component template: ${REPORTING_DATA_STREAM_COMPONENT_TEMPLATE}` + ); + await ilmPolicyManager.linkIlmPolicy(); } private async indexReport(report: Report): Promise { const doc = { - index: report._index!, + index: REPORTING_DATA_STREAM_ALIAS, id: report._id, refresh: 'wait_for' as estypes.Refresh, + op_type: 'create' as const, body: { ...report.toReportSource(), ...sourceDoc({ @@ -193,52 +154,23 @@ export class ReportingStore { return await client.index(doc); } - /* - * Called from addReport, which handles any errors - */ - private async refreshIndex(index: string) { - const client = await this.getClient(); - - return client.indices.refresh({ index }); - } - /** * Function to be called during plugin start phase. This ensures the environment is correctly * configured for storage of reports. */ public async start() { - if (!this.config.statefulSettings.enabled) { - return; - } - const ilmPolicyManager = await this.getIlmPolicyManager(); try { - if (await ilmPolicyManager.doesIlmPolicyExist()) { - this.logger.debug(`Found ILM policy ${ILM_POLICY_NAME}; skipping creation.`); - return; - } - this.logger.info(`Creating ILM policy for managing reporting indices: ${ILM_POLICY_NAME}`); - await ilmPolicyManager.createIlmPolicy(); + await this.createIlmPolicy(); } catch (e) { this.logger.error('Error in start phase'); - this.logger.error(e.body?.error); + this.logger.error(e); throw e; } } public async addReport(report: Report): Promise { - let index = report._index; - if (!index) { - const timestamp = indexTimestamp(this.indexInterval); - index = `${this.indexPrefix}-${timestamp}`; - report._index = index; - } - await this.createIndex(index); - try { report.updateWithEsDoc(await this.indexReport(report)); - - await this.refreshIndex(index); - return report as SavedReport; } catch (err) { this.reportingCore.getEventLogger(report).logError(err); @@ -402,8 +334,4 @@ export class ReportingStore { return body; } - - public getReportingIndexPattern(): string { - return `${this.indexPrefix}-*`; - } } diff --git a/x-pack/plugins/reporting/server/routes/common/jobs/jobs_query.ts b/x-pack/plugins/reporting/server/routes/common/jobs/jobs_query.ts index d371d49970a72c..56b0ac4677449e 100644 --- a/x-pack/plugins/reporting/server/routes/common/jobs/jobs_query.ts +++ b/x-pack/plugins/reporting/server/routes/common/jobs/jobs_query.ts @@ -10,7 +10,7 @@ import type { ElasticsearchClient } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { JOB_STATUS } from '@kbn/reporting-common'; import type { ReportApiJSON, ReportSource } from '@kbn/reporting-common/types'; -import { REPORTING_SYSTEM_INDEX } from '@kbn/reporting-server'; +import { REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY } from '@kbn/reporting-server'; import type { ReportingCore } from '../../..'; import { Report } from '../../../lib/store'; import { runtimeFieldKeys, runtimeFields } from '../../../lib/store/runtime_fields'; @@ -54,10 +54,6 @@ export interface JobsQueryFactory { } export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory { - function getIndex() { - return `${REPORTING_SYSTEM_INDEX}-*`; - } - async function execQuery< T extends (client: ElasticsearchClient) => Promise> | undefined> >(callback: T): Promise> | undefined> { @@ -96,7 +92,7 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory }); const response = (await execQuery((elasticsearchClient) => - elasticsearchClient.search({ body, index: getIndex() }) + elasticsearchClient.search({ body, index: REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY }) )) as estypes.SearchResponse; return ( @@ -127,7 +123,7 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory }; const response = await execQuery((elasticsearchClient) => - elasticsearchClient.count({ body, index: getIndex() }) + elasticsearchClient.count({ body, index: REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY }) ); return response?.count ?? 0; @@ -156,7 +152,10 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory }); const response = await execQuery((elasticsearchClient) => - elasticsearchClient.search({ body, index: getIndex() }) + elasticsearchClient.search({ + body, + index: REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY, + }) ); const result = response?.hits?.hits?.[0]; @@ -187,7 +186,10 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory }; const response = await execQuery((elasticsearchClient) => - elasticsearchClient.search({ body, index: getIndex() }) + elasticsearchClient.search({ + body, + index: REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY, + }) ); const hits = response?.hits?.hits?.[0]; const status = hits?._source?.status; diff --git a/x-pack/plugins/reporting/server/routes/internal/deprecations/deprecations.ts b/x-pack/plugins/reporting/server/routes/internal/deprecations/deprecations.ts index d35adf717cbb9b..ae8ff7fd55cf1b 100644 --- a/x-pack/plugins/reporting/server/routes/internal/deprecations/deprecations.ts +++ b/x-pack/plugins/reporting/server/routes/internal/deprecations/deprecations.ts @@ -6,11 +6,11 @@ */ import { errors } from '@elastic/elasticsearch'; import type { Logger, RequestHandler } from '@kbn/core/server'; -import { ILM_POLICY_NAME, INTERNAL_ROUTES } from '@kbn/reporting-common'; -import type { IlmPolicyStatusResponse } from '@kbn/reporting-common/url'; +import { INTERNAL_ROUTES } from '@kbn/reporting-common'; +import type { IlmPolicyStatusResponse } from '@kbn/reporting-common/types'; +import { REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY } from '@kbn/reporting-server'; import type { ReportingCore } from '../../../core'; import { IlmPolicyManager } from '../../../lib'; -import { deprecations } from '../../../lib/deprecations'; import { getCounters } from '../../common'; const getAuthzWrapper = @@ -24,15 +24,13 @@ const getAuthzWrapper = const { elasticsearch } = await ctx.core; - const store = await reporting.getStore(); - try { const body = await elasticsearch.client.asCurrentUser.security.hasPrivileges({ body: { index: [ { privileges: ['manage'], // required to do anything with the reporting indices - names: [store.getReportingIndexPattern()], + names: [REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY], allow_restricted_indices: true, }, ], @@ -65,15 +63,11 @@ export const registerDeprecationsRoutes = (reporting: ReportingCore, logger: Log authzWrapper(async ({ core }, req, res) => { const counters = getCounters(req.route.method, getStatusPath, reporting.getUsageCounter()); - const { - elasticsearch: { client: scopedClient }, - } = await core; - const checkIlmMigrationStatus = () => { - return deprecations.checkIlmMigrationStatus({ - reportingCore: reporting, - // We want to make the current status visible to all reporting users - elasticsearchClient: scopedClient.asInternalUser, - }); + const checkIlmMigrationStatus = async () => { + const { client: scopedClient } = (await core).elasticsearch; + + const ilmPolicyManager = IlmPolicyManager.create({ client: scopedClient.asInternalUser }); + return ilmPolicyManager.checkIlmMigrationStatus(); }; try { @@ -106,17 +100,15 @@ export const registerDeprecationsRoutes = (reporting: ReportingCore, logger: Log authzWrapper(async ({ core }, req, res) => { const counters = getCounters(req.route.method, migrateApiPath, reporting.getUsageCounter()); - const store = await reporting.getStore(); - const { - client: { asCurrentUser: client }, - } = (await core).elasticsearch; - - const scopedIlmPolicyManager = IlmPolicyManager.create({ - client, - }); - // First we ensure that the reporting ILM policy exists in the cluster try { + const { + client: { asCurrentUser }, + } = (await core).elasticsearch; + const scopedIlmPolicyManager = IlmPolicyManager.create({ + client: asCurrentUser, + }); + // We don't want to overwrite an existing reporting policy because it may contain alterations made by users if (!(await scopedIlmPolicyManager.doesIlmPolicyExist())) { await scopedIlmPolicyManager.createIlmPolicy(); @@ -125,24 +117,19 @@ export const registerDeprecationsRoutes = (reporting: ReportingCore, logger: Log return res.customError({ statusCode: e?.statusCode ?? 500, body: { message: e.message } }); } - const indexPattern = store.getReportingIndexPattern(); - // Second we migrate all of the existing indices to be managed by the reporting ILM policy try { - await client.indices.putSettings({ - index: indexPattern, - body: { - index: { - lifecycle: { - name: ILM_POLICY_NAME, - }, - }, - }, + const { + client: { asInternalUser }, + } = (await core).elasticsearch; + const unscopedIlmPolicyManager = IlmPolicyManager.create({ + client: asInternalUser, }); + const response = await unscopedIlmPolicyManager.migrateIndicesToIlmPolicy(); counters.usageCounter(); - return res.ok(); + return res.ok({ body: response }); } catch (err) { logger.error(err); diff --git a/x-pack/test/functional/apps/discover/reporting.ts b/x-pack/test/functional/apps/discover/reporting.ts index cc5a198cb54168..61ddea54a7cb1f 100644 --- a/x-pack/test/functional/apps/discover/reporting.ts +++ b/x-pack/test/functional/apps/discover/reporting.ts @@ -36,14 +36,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); }; - const getReport = async () => { + const getReport = async ({ timeout } = { timeout: 60 * 1000 }) => { // close any open notification toasts await toasts.dismissAll(); await PageObjects.reporting.openExportTab(); await PageObjects.reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); + const url = await PageObjects.reporting.getReportURL(timeout); const res = await PageObjects.reporting.getResponse(url ?? ''); expect(res.status).to.equal(200); @@ -173,7 +173,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch('large export'); // match file length, the beginning and the end of the csv file contents - const { text: csvFile } = await getReport(); + const { text: csvFile } = await getReport({ timeout: 80 * 1000 }); expect(csvFile.length).to.be(4826973); expectSnapshot(csvFile.slice(0, 5000)).toMatch(); expectSnapshot(csvFile.slice(-5000)).toMatch(); diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/datastream.ts b/x-pack/test/reporting_api_integration/reporting_and_security/datastream.ts new file mode 100644 index 00000000000000..f116110db78f1b --- /dev/null +++ b/x-pack/test/reporting_api_integration/reporting_and_security/datastream.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { expect } from 'expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default function ({ getService }: FtrProviderContext) { + const reportingAPI = getService('reportingAPI'); + const supertest = getService('supertest'); + + describe('Data Stream', () => { + before(async () => { + await reportingAPI.initEcommerce(); + + // for this test, we don't need to wait for the job to finish or verify the result + await reportingAPI.postJob( + `/api/reporting/generate/csv_searchsource?jobParams=%28browserTimezone%3AUTC%2Ccolumns%3A%21%28%29%2CobjectType%3Asearch%2CsearchSource%3A%28fields%3A%21%28%28field%3A%27%2A%27%2Cinclude_unmapped%3Atrue%29%29%2Cfilter%3A%21%28%28meta%3A%28field%3A%27%40timestamp%27%2Cindex%3A%27logstash-%2A%27%2Cparams%3A%28%29%29%2Cquery%3A%28range%3A%28%27%40timestamp%27%3A%28format%3Astrict_date_optional_time%2Cgte%3A%272015-09-22T09%3A17%3A53.728Z%27%2Clte%3A%272015-09-22T09%3A30%3A50.786Z%27%29%29%29%29%2C%28%27%24state%27%3A%28store%3AappState%29%2Cmeta%3A%28alias%3A%21n%2Cdisabled%3A%21f%2Cindex%3A%27logstash-%2A%27%2Ckey%3Aquery%2Cnegate%3A%21f%2Ctype%3Acustom%2Cvalue%3A%27%7B%22bool%22%3A%7B%22minimum_should_match%22%3A1%2C%22should%22%3A%5B%7B%22match_phrase%22%3A%7B%22%40tags%22%3A%22info%22%7D%7D%5D%7D%7D%27%29%2Cquery%3A%28bool%3A%28minimum_should_match%3A1%2Cshould%3A%21%28%28match_phrase%3A%28%27%40tags%27%3Ainfo%29%29%29%29%29%29%29%2Cindex%3A%27logstash-%2A%27%2Cquery%3A%28language%3Akuery%2Cquery%3A%27%27%29%2Csort%3A%21%28%28%27%40timestamp%27%3A%28format%3Astrict_date_optional_time%2Corder%3Adesc%29%29%29%29%2Ctitle%3A%27A%20saved%20search%20with%20match_phrase%20filter%20and%20no%20columns%20selected%27%2Cversion%3A%278.15.0%27%29` + ); + }); + + after(async () => { + await reportingAPI.deleteAllReports(); + await reportingAPI.teardownEcommerce(); + }); + + it('uses the datastream configuration without set policy', async () => { + const { body } = await supertest + .get(`/api/index_management/data_streams/.kibana-reporting`) + .set('kbn-xsrf', 'xxx') + .set('x-elastic-internal-origin', 'xxx') + .expect(200); + + expect(body).toEqual({ + _meta: { + description: 'default kibana reporting template installed by elasticsearch', + managed: true, + }, + name: '.kibana-reporting', + indexTemplateName: '.kibana-reporting', + timeStampField: { name: '@timestamp' }, + indices: [ + { + name: expect.any(String), + uuid: expect.any(String), + managedBy: 'Index Lifecycle Management', + preferILM: true, + }, + ], + generation: 1, + health: 'green', + ilmPolicyName: 'kibana-reporting', + maxTimeStamp: 0, + privileges: { delete_index: true, manage_data_stream_lifecycle: true }, + hidden: true, + lifecycle: { enabled: true }, + nextGenerationManagedBy: 'Index Lifecycle Management', + storageSize: expect.any(String), + storageSizeBytes: expect.any(Number), + }); + }); + }); +} diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts b/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts index f3e1223c260849..0442917012f490 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts @@ -42,7 +42,8 @@ export default function ({ getService }: FtrProviderContext) { cluster: ['manage_ilm'], indices: [ { names: ['ecommerce'], privileges: ['read'], allow_restricted_indices: false }, - { names: ['.reporting-*'], privileges: ['all'], allow_restricted_indices: true }, + { names: ['.reporting-*'], privileges: ['all'], allow_restricted_indices: true }, // plain indices (from old version) + { names: ['.kibana-reporting'], privileges: ['all'], allow_restricted_indices: true }, // data stream ], run_as: [], }, diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/index.ts b/x-pack/test/reporting_api_integration/reporting_and_security/index.ts index 2d968295f09bee..14c33bced76015 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/index.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/index.ts @@ -22,6 +22,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./bwc_existing_indexes')); loadTestFile(require.resolve('./security_roles_privileges')); loadTestFile(require.resolve('./generate_csv_discover')); + loadTestFile(require.resolve('./datastream')); loadTestFile(require.resolve('./csv_v2')); loadTestFile(require.resolve('./csv_v2_esql')); loadTestFile(require.resolve('./network_policy')); diff --git a/x-pack/plugins/reporting/server/lib/store/index_timestamp.ts b/x-pack/test/reporting_api_integration/services/index_timestamp.ts similarity index 100% rename from x-pack/plugins/reporting/server/lib/store/index_timestamp.ts rename to x-pack/test/reporting_api_integration/services/index_timestamp.ts diff --git a/x-pack/test/reporting_api_integration/services/scenarios.ts b/x-pack/test/reporting_api_integration/services/scenarios.ts index a2bc7e57dc8d7e..253c0d36354ce4 100644 --- a/x-pack/test/reporting_api_integration/services/scenarios.ts +++ b/x-pack/test/reporting_api_integration/services/scenarios.ts @@ -5,12 +5,16 @@ * 2.0. */ +import type { LoadActionPerfOptions } from '@kbn/es-archiver'; +import { INTERNAL_ROUTES } from '@kbn/reporting-common'; +import type { JobParamsCSV } from '@kbn/reporting-export-types-csv-common'; import type { JobParamsPDFDeprecated } from '@kbn/reporting-export-types-pdf-common'; import type { JobParamsPNGV2 } from '@kbn/reporting-export-types-png-common'; -import type { JobParamsCSV } from '@kbn/reporting-export-types-csv-common'; +import { + REPORTING_DATA_STREAM_WILDCARD, + REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY, +} from '@kbn/reporting-server'; import rison from '@kbn/rison'; -import { LoadActionPerfOptions } from '@kbn/es-archiver'; -import { INTERNAL_ROUTES } from '@kbn/reporting-common'; import { FtrProviderContext } from '../ftr_provider_context'; function removeWhitespace(str: string) { @@ -64,7 +68,6 @@ export function createScenarios({ getService }: Pick { await esArchiver.unload('x-pack/test/functional/es_archives/reporting/ecommerce'); await kibanaServer.importExport.unload(ecommerceSOPath); - await deleteAllReports(); }; const initLogs = async () => { @@ -211,7 +214,7 @@ export function createScenarios({ getService }: Pick { await esSupertest - .post('/.reporting*/_delete_by_query') + .post(`/${REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY}/_delete_by_query`) .send({ query: { match_all: {} } }) .expect(200); }); @@ -248,7 +251,7 @@ export function createScenarios({ getService }: Pick = { + ecommerce: { + data: 'x-pack/test/functional/es_archives/reporting/ecommerce', + savedObjects: 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce', + }, + }; + + describe('Data Stream', () => { + before(async () => { + await esArchiver.load(archives.ecommerce.data); + await kibanaServer.importExport.load(archives.ecommerce.savedObjects); + + // for this test, we don't need to wait for the job to finish or verify the result + await reportingAPI.createReportJobInternal('csv_searchsource', { + browserTimezone: 'UTC', + objectType: 'search', + searchSource: { + index: '5193f870-d861-11e9-a311-0fa548c5f953', + query: { language: 'kuery', query: '' }, + version: true, + }, + title: 'Ecommerce Data', + version: '8.15.0', + }); + }); + + after(async () => { + await reportingAPI.deleteAllReports(); + await esArchiver.unload(archives.ecommerce.data); + await kibanaServer.importExport.unload(archives.ecommerce.savedObjects); + }); + + it('uses the datastream configuration with set ILM policy', async () => { + const { body } = await supertest + .get(`/api/index_management/data_streams/.kibana-reporting`) + .set('kbn-xsrf', 'xxx') + .set('x-elastic-internal-origin', 'xxx') + .expect(200); + + expect(body).toEqual({ + _meta: { + description: 'default kibana reporting template installed by elasticsearch', + managed: true, + }, + name: '.kibana-reporting', + indexTemplateName: '.kibana-reporting', + generation: 1, + health: 'green', + hidden: true, + indices: [ + { + name: expect.any(String), + uuid: expect.any(String), + managedBy: 'Data stream lifecycle', + preferILM: true, + }, + ], + lifecycle: { enabled: true }, + maxTimeStamp: 0, + nextGenerationManagedBy: 'Data stream lifecycle', + privileges: { delete_index: true, manage_data_stream_lifecycle: true }, + timeStampField: { name: '@timestamp' }, + storageSize: expect.any(String), + storageSizeBytes: expect.any(Number), + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts index 89e5f5a0de4a7e..0450ec2a3ff306 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts @@ -730,7 +730,9 @@ export default function ({ getService }: FtrProviderContext) { }, }) ); - await reportingAPI.waitForJobToFinish(res.path); + await reportingAPI.waitForJobToFinish(res.path, undefined, undefined, { + timeout: 80 * 1000, + }); const csvFile = await reportingAPI.getCompletedJobOutput(res.path); expect((csvFile as string).length).to.be(4826973); expectSnapshot(createPartialCsv(csvFile)).toMatch(); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts index 3d776ec490abd3..790a98257552ed 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts @@ -13,5 +13,6 @@ export default ({ loadTestFile }: FtrProviderContext) => { loadTestFile(require.resolve('./management')); loadTestFile(require.resolve('./generate_csv_discover')); + loadTestFile(require.resolve('./datastream')); }); }; diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts index 3a4cee55dad942..b5eb49519ce311 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts @@ -35,14 +35,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); }; - const getReport = async () => { + const getReport = async ({ timeout } = { timeout: 60 * 1000 }) => { // close any open notification toasts await toasts.dismissAll(); await PageObjects.reporting.openExportTab(); await PageObjects.reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); + const url = await PageObjects.reporting.getReportURL(timeout); // TODO: Fetch CSV client side in Serverless since `PageObjects.reporting.getResponse()` // doesn't work because it relies on `SecurityService.testUserSupertest` const res: { status: number; contentType: string | null; text: string } = @@ -184,7 +184,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch('large export'); // match file length, the beginning and the end of the csv file contents - const { text: csvFile } = await getReport(); + const { text: csvFile } = await getReport({ timeout: 80 * 1000 }); expect(csvFile.length).to.be(4826973); expectSnapshot(csvFile.slice(0, 5000)).toMatch(); expectSnapshot(csvFile.slice(-5000)).toMatch(); From 14d459f5816ba1531f284a19858967809d853dd8 Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Tue, 21 May 2024 18:39:24 +0100 Subject: [PATCH 67/97] [Console Monaco Migration] Register keyboard commands (#183504) Closes https://github.com/elastic/kibana/issues/180212 ## Summary This PR adds functionality for the following keyboard commands in the Console Monaco editor: - Send requests - Cmd/Ctr + Enter - Open documentation - Cmd/Ctr + / - Auto indent - Cmd/Ctr + I - Move to previous/next request - Cmd/Ctr + Arrow Up/Down - Go to line - Cmd/Ctr + L https://github.com/elastic/kibana/assets/59341489/5a05092d-f677-4352-bbcf-1884e5c83055 **Note to reviewers:** The Monaco editor also has an [addCommand](https://microsoft.github.io/monaco-editor/typedoc/functions/editor.addCommand.html) public API for registering a keyboard command, but in this PR we use `addAction` instead so that we can get an object which can be disposed on component unmount (see https://github.com/microsoft/monaco-editor/issues/942 for more context). --- .../containers/editor/monaco/hooks/index.ts | 1 + .../hooks/use_register_keyboard_commands.ts | 158 +++++++++++++++ .../editor/monaco/monaco_editor.tsx | 36 ++-- .../monaco_editor_actions_provider.test.ts | 191 ++++++++++++++++++ .../monaco/monaco_editor_actions_provider.ts | 62 ++++++ 5 files changed, 436 insertions(+), 12 deletions(-) create mode 100644 src/plugins/console/public/application/containers/editor/monaco/hooks/use_register_keyboard_commands.ts diff --git a/src/plugins/console/public/application/containers/editor/monaco/hooks/index.ts b/src/plugins/console/public/application/containers/editor/monaco/hooks/index.ts index e0a56ebf655d01..93bc00bb4e8e7b 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/hooks/index.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/hooks/index.ts @@ -10,3 +10,4 @@ export { useResizeCheckerUtils } from './use_resize_checker_utils'; export { useSetInitialValue } from './use_set_initial_value'; export { useSetupAutocompletePolling } from './use_setup_autocomplete_polling'; export { useSetupAutosave } from './use_setup_autosave'; +export { useKeyboardCommandsUtils } from './use_register_keyboard_commands'; diff --git a/src/plugins/console/public/application/containers/editor/monaco/hooks/use_register_keyboard_commands.ts b/src/plugins/console/public/application/containers/editor/monaco/hooks/use_register_keyboard_commands.ts new file mode 100644 index 00000000000000..9fff68bf13b2b8 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/hooks/use_register_keyboard_commands.ts @@ -0,0 +1,158 @@ +/* + * 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 { useRef } from 'react'; +import { i18n } from '@kbn/i18n'; +import { monaco } from '@kbn/monaco'; + +interface RegisterKeyboardCommandsParams { + /** The current Monaco editor instance. */ + editor: monaco.editor.IStandaloneCodeEditor; + /** Function for sending the selected request(s). */ + sendRequest: () => void; + /** Function for indenting the selected request(s). */ + autoIndent: () => void; + /** Function that returns the documentation link for the selected request. */ + getDocumentationLink: () => Promise | undefined; + /** Function for moving the cursor to the previous request edge. */ + moveToPreviousRequestEdge: () => void; + /** Function for moving the cursor to the next request edge. */ + moveToNextRequestEdge: () => void; +} + +const SEND_REQUEST_ACTION_ID = 'sendRequest'; +const AUTO_INDENT_ACTION_ID = 'autoIndent'; +const OPEN_DOCS_ACTION_ID = 'openDocs'; +const MOVE_UP_ACTION_ID = 'moveUp'; +const MOVE_DOWN_ACTION_ID = 'moveDown'; +const MOVE_TO_LINE_ACTION_ID = 'moveToLine'; + +/** + * Hook that returns a function for registering keyboard commands in the editor. + * + * @param params The {@link RegisterKeyboardCommandsParams} to use. + */ +export const useKeyboardCommandsUtils = () => { + const sendRequestAction = useRef(null); + const autoIndentAction = useRef(null); + const openDocsAction = useRef(null); + const moveToPreviousAction = useRef(null); + const moveToNextAction = useRef(null); + const moveToLineAction = useRef(null); + + const disposeAllActions = () => { + if (sendRequestAction.current) { + sendRequestAction.current.dispose(); + } + if (autoIndentAction.current) { + autoIndentAction.current.dispose(); + } + if (openDocsAction.current) { + openDocsAction.current.dispose(); + } + if (moveToPreviousAction.current) { + moveToPreviousAction.current.dispose(); + } + if (moveToNextAction.current) { + moveToNextAction.current.dispose(); + } + if (moveToLineAction.current) { + moveToLineAction.current.dispose(); + } + }; + + const registerKeyboardCommands = (params: RegisterKeyboardCommandsParams) => { + const { + editor, + sendRequest, + autoIndent, + getDocumentationLink, + moveToPreviousRequestEdge, + moveToNextRequestEdge, + } = params; + + const openDocs = async () => { + const documentation = await getDocumentationLink(); + if (!documentation) { + return; + } + window.open(documentation, '_blank'); + }; + + disposeAllActions(); + + sendRequestAction.current = editor.addAction({ + id: SEND_REQUEST_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.sendRequest', { + defaultMessage: 'Send request', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter], + run: sendRequest, + }); + + autoIndentAction.current = editor.addAction({ + id: AUTO_INDENT_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.autoIndent', { + defaultMessage: 'Apply indentations', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyI], + run: autoIndent, + }); + + openDocsAction.current = editor.addAction({ + id: OPEN_DOCS_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.openDocs', { + defaultMessage: 'Open documentation', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Slash], + run: openDocs, + }); + + moveToPreviousAction.current = editor.addAction({ + id: MOVE_UP_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.moveToPreviousRequestEdge', { + defaultMessage: 'Move to previous request start or end', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.UpArrow], + run: moveToPreviousRequestEdge, + }); + + moveToNextAction.current = editor.addAction({ + id: MOVE_DOWN_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.moveToNextRequestEdge', { + defaultMessage: 'Move to next request start or end', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.DownArrow], + run: moveToNextRequestEdge, + }); + + moveToLineAction.current = editor.addAction({ + id: MOVE_TO_LINE_ACTION_ID, + label: i18n.translate('console.keyboardCommandActionLabel.moveToLine', { + defaultMessage: 'Move cursor to a line', + }), + // eslint-disable-next-line no-bitwise + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyL], + run: () => { + const line = parseInt(prompt('Enter line number') ?? '', 10); + if (!isNaN(line)) { + editor.setPosition({ lineNumber: line, column: 1 }); + } + }, + }); + }; + + const unregisterKeyboardCommands = () => disposeAllActions(); + + return { registerKeyboardCommands, unregisterKeyboardCommands }; +}; diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx index 09da1876949890..cd4ba9297f1086 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx @@ -23,6 +23,7 @@ import { useSetupAutocompletePolling, useSetupAutosave, useResizeCheckerUtils, + useKeyboardCommandsUtils, } from './hooks'; import { MonacoEditorActionsProvider } from './monaco_editor_actions_provider'; import { getSuggestionProvider } from './monaco_editor_suggestion_provider'; @@ -48,23 +49,12 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => { const divRef = useRef(null); const { setupResizeChecker, destroyResizeChecker } = useResizeCheckerUtils(); + const { registerKeyboardCommands, unregisterKeyboardCommands } = useKeyboardCommandsUtils(); const dispatch = useRequestActionContext(); const actionsProvider = useRef(null); const [editorActionsCss, setEditorActionsCss] = useState({}); - const editorDidMountCallback = useCallback( - (editor: monaco.editor.IStandaloneCodeEditor) => { - actionsProvider.current = new MonacoEditorActionsProvider(editor, setEditorActionsCss); - setupResizeChecker(divRef.current!, editor); - }, - [setupResizeChecker] - ); - - const editorWillUnmountCallback = useCallback(() => { - destroyResizeChecker(); - }, [destroyResizeChecker]); - const getCurlCallback = useCallback(async (): Promise => { const curl = await actionsProvider.current?.getCurl(esHostService.getHost()); return curl ?? ''; @@ -82,6 +72,28 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => { await actionsProvider.current?.sendRequests(toasts, dispatch, trackUiMetric, http); }, [dispatch, http, toasts, trackUiMetric]); + const editorDidMountCallback = useCallback( + (editor: monaco.editor.IStandaloneCodeEditor) => { + actionsProvider.current = new MonacoEditorActionsProvider(editor, setEditorActionsCss); + setupResizeChecker(divRef.current!, editor); + registerKeyboardCommands({ + editor, + sendRequest: sendRequestsCallback, + autoIndent: async () => await actionsProvider.current?.autoIndent(), + getDocumentationLink: getDocumenationLink, + moveToPreviousRequestEdge: async () => + await actionsProvider.current?.moveToPreviousRequestEdge(), + moveToNextRequestEdge: async () => await actionsProvider.current?.moveToNextRequestEdge(), + }); + }, + [getDocumenationLink, registerKeyboardCommands, sendRequestsCallback, setupResizeChecker] + ); + + const editorWillUnmountCallback = useCallback(() => { + destroyResizeChecker(); + unregisterKeyboardCommands(); + }, [destroyResizeChecker, unregisterKeyboardCommands]); + const suggestionProvider = useMemo(() => { return getSuggestionProvider(actionsProvider); }, []); diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts index fb21900ddc292d..d2dd7a56a8ce3b 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts @@ -66,8 +66,10 @@ describe('Editor actions provider', () => { onDidChangeCursorSelection: jest.fn(), onDidContentSizeChange: jest.fn(), getSelection: jest.fn(), + getPosition: jest.fn(), getTopForLineNumber: jest.fn(), getScrollTop: jest.fn(), + setPosition: jest.fn(), } as unknown as jest.Mocked; editor.getModel.mockReturnValue({ @@ -210,4 +212,193 @@ describe('Editor actions provider', () => { expect((endpoints as string[]).sort()).toEqual(['_cat', '_search']); }); }); + + describe('move to next/previous request edge', () => { + beforeEach(() => { + /* The editor has the following text: + 1: + 2: POST _search + 3: { + 4: "test": "test" + 5: } + 6: GET _analyze + 7: + */ + mockGetParsedRequests.mockReturnValue([ + { + method: 'POST', + url: '_search', + startOffset: 1, + endOffset: 36, + data: [ + { + test: 'test', + }, + ], + }, + { + method: 'GET', + url: '_analyze', + startOffset: 37, + endOffset: 49, + }, + ]); + + editor.getModel.mockReturnValue({ + getPositionAt: (offset: number) => { + // mock for start offsets of the mocked requests + if (offset === 1) { + return { lineNumber: 2, column: 1 }; + } + if (offset === 37) { + return { lineNumber: 6, column: 1 }; + } + // mock for end offsets of the mocked requests + if (offset === 36) { + return { lineNumber: 5, column: 2 }; + } + if (offset === 49) { + return { lineNumber: 6, column: 13 }; + } + }, + getLineContent: (lineNumber: number) => { + if (lineNumber === 1) { + return ''; + } + if (lineNumber === 2) { + return 'POST _search'; + } + if (lineNumber === 3) { + return '{'; + } + if (lineNumber === 4) { + return ' "test": "test"'; + } + if (lineNumber === 5) { + return '}'; + } + if (lineNumber === 6) { + return 'GET _analyze'; + } + if (lineNumber === 7) { + return ''; + } + }, + getLineCount: () => 7, + } as unknown as monaco.editor.ITextModel); + }); + describe('moveToPreviousRequestEdge', () => { + it('correctly sets position when cursor is at first line of a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 6, + column: 4, + } as monaco.Position); + + await editorActionsProvider.moveToPreviousRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 5, column: 1 }); + }); + + it('correctly sets position when cursor is at last line of a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 5, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToPreviousRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 2, column: 1 }); + }); + + it('correctly sets position when cursor is inside a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 4, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToPreviousRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 2, column: 1 }); + }); + + it('correctly sets position when cursor is after a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 7, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToPreviousRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 6, column: 1 }); + }); + + it('correctly sets position to first line of editor when there are no requests before cursor', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 2, + column: 3, + } as monaco.Position); + + await editorActionsProvider.moveToPreviousRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 1, column: 1 }); + }); + }); + + describe('moveToNextRequestEdge', () => { + it('correctly sets position when cursor is at first line of a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 2, + column: 8, + } as monaco.Position); + + await editorActionsProvider.moveToNextRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 5, column: 1 }); + }); + + it('correctly sets position when cursor is at last line of a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 5, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToNextRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 6, column: 1 }); + }); + + it('correctly sets position when cursor is inside a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 3, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToNextRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 5, column: 1 }); + }); + + it('correctly sets position when cursor is before a request', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 1, + column: 1, + } as monaco.Position); + + await editorActionsProvider.moveToNextRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 2, column: 1 }); + }); + + it('correctly sets position to last line of editor when there are no requests after cursor', async () => { + editor.getPosition.mockReturnValue({ + lineNumber: 6, + column: 3, + } as monaco.Position); + + await editorActionsProvider.moveToNextRequestEdge(); + expect(editor.setPosition).toHaveBeenCalledTimes(1); + expect(editor.setPosition).toHaveBeenCalledWith({ lineNumber: 7, column: 1 }); + }); + }); + }); }); diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts index de9c2289c8a291..4a13b3ef782cad 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts @@ -399,4 +399,66 @@ export class MonacoEditorActionsProvider { }, ]); } + + /** + * This function moves the cursor to the previous request edge (start/end line). + * If the cursor is inside a request, it is moved to the start line of this request. + * If there are no requests before the cursor, it is moved at the first line in the editor. + */ + public async moveToPreviousRequestEdge() { + const currentPosition = this.editor.getPosition(); + const model = this.editor.getModel(); + if (!currentPosition || !model) { + return; + } + const { lineNumber: currentLineNumber } = currentPosition; + // Get all requests before the current line + const requestsBefore = await this.getRequestsBetweenLines(model, 1, currentLineNumber - 1); + if (requestsBefore.length === 0) { + // If no requests before current line, set position to first line + this.editor.setPosition({ lineNumber: 1, column: 1 }); + return; + } + const lastRequestBefore = requestsBefore[requestsBefore.length - 1]; + if (lastRequestBefore.endLineNumber < currentLineNumber) { + this.editor.setPosition({ lineNumber: lastRequestBefore.endLineNumber, column: 1 }); + } else { + // If the end line of the request is after the current line, then the cursor is inside the request + // The previous request edge is the start line of the request + this.editor.setPosition({ lineNumber: lastRequestBefore.startLineNumber, column: 1 }); + } + } + + /** + * This function moves the cursor to the next request edge. + * If the cursor is inside a request, it is moved to the end line of this request. + * If there are no requests after the cursor, it is moved at the last line in the editor. + */ + public async moveToNextRequestEdge() { + const currentPosition = this.editor.getPosition(); + const model = this.editor.getModel(); + if (!currentPosition || !model) { + return; + } + const { lineNumber: currentLineNumber } = currentPosition; + // Get all requests before the current line + const requestsAfter = await this.getRequestsBetweenLines( + model, + currentLineNumber + 1, + model.getLineCount() + ); + if (requestsAfter.length === 0) { + // If no requests after current line, set position to last line + this.editor.setPosition({ lineNumber: model.getLineCount(), column: 1 }); + return; + } + const firstRequestAfter = requestsAfter[0]; + if (firstRequestAfter.startLineNumber > currentLineNumber) { + this.editor.setPosition({ lineNumber: firstRequestAfter.startLineNumber, column: 1 }); + } else { + // If the start line of the request is before the current line, then the cursor is inside the request + // The next request edge is the end line of the request + this.editor.setPosition({ lineNumber: firstRequestAfter.endLineNumber, column: 1 }); + } + } } From 256de250e907a61185834acc49acddcb8c63626e Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Tue, 21 May 2024 13:55:59 -0400 Subject: [PATCH 68/97] fix(slo): hide pagination when not enough result and fix state (#183938) --- .../grouped_slos/group_list_view.tsx | 19 ++++++++++++------- .../components/grouped_slos/group_view.tsx | 4 ++-- .../public/pages/slos/components/slo_list.tsx | 4 ++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx index 4caa79e90d28c9..eefe5c1ba1e878 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx @@ -225,13 +225,18 @@ export function GroupListView({ sloView={sloView} /> - setItemsPerPage(perPage)} - /> + {total > 0 && total > itemsPerPage ? ( + { + setPage(0); + setItemsPerPage(perPage); + }} + /> + ) : null} )} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx index 207be28bf72645..ffe7c1ede95b23 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx @@ -93,7 +93,7 @@ export function GroupView({ /> ))} - {total > 0 ? ( + {total > 0 && total > perPage ? ( { - onStateChange({ perPage: newPerPage }); + onStateChange({ perPage: newPerPage, page: 0 }); }} /> diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/slo_list.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/slo_list.tsx index be10b99ae55319..49e49f09169bf0 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/slo_list.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/slo_list.tsx @@ -98,7 +98,7 @@ export function SloList() { error={isError} sloView={view} /> - {total > 0 ? ( + {total > 0 && total > perPage ? ( { - onStateChange({ perPage: newPerPage }); + onStateChange({ perPage: newPerPage, page: 0 }); }} /> From db4c26f24f8a0db6c00d86dfa1e728e6653942dd Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Tue, 21 May 2024 13:12:31 -0500 Subject: [PATCH 69/97] search_notebooks: sync with latest changes and bug fixes (#183936) ## Summary Syncing cached notebooks to add telemetry and fix the colab link for keyword & filtering notebook. --- .../server/data/00_quick_start.json | 108 +++++++++++------- .../data/01_keyword_querying_filtering.json | 42 ++++++- .../server/data/02_hybrid_search.json | 26 ++++- .../server/data/03_elser.json | 26 ++++- .../server/data/04_multilingual.json | 26 ++++- 5 files changed, 181 insertions(+), 47 deletions(-) diff --git a/x-pack/plugins/search_notebooks/server/data/00_quick_start.json b/x-pack/plugins/search_notebooks/server/data/00_quick_start.json index bb5ee713266836..53b3ca4e555877 100644 --- a/x-pack/plugins/search_notebooks/server/data/00_quick_start.json +++ b/x-pack/plugins/search_notebooks/server/data/00_quick_start.json @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "WHC3hHGW-wbI", "metadata": { "id": "WHC3hHGW-wbI" @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "f38e0397", "metadata": { "colab": { @@ -137,17 +137,39 @@ }, { "cell_type": "markdown", - "id": "1462ebd8", - "metadata": { - "id": "1462ebd8" - }, + "id": "cb6ad7e9-0636-4cf3-a803-bf160fe16b33", + "metadata": {}, "source": [ - "Confirm that the client has connected with this test." + "### Enable Telemetry\n", + "\n", + "Knowing that you are using this notebook helps us decide where to invest our efforts to improve our products. We would like to ask you that you run the following code to let us gather anonymous usage statistics. See [telemetry.py](https://github.com/elastic/elasticsearch-labs/blob/main/telemetry/telemetry.py) for details. Thank you!" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, + "id": "3b04f442-729d-406d-b826-654483498df6", + "metadata": {}, + "outputs": [], + "source": [ + "!curl -O -s https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/telemetry/telemetry.py\n", + "from telemetry import enable_telemetry\n", + "\n", + "client = enable_telemetry(client, \"00-quick-start\")" + ] + }, + { + "cell_type": "markdown", + "id": "d12b707c-e89d-4b43-bee5-edb1beb84839", + "metadata": {}, + "source": [ + "### Test the Client\n", + "Before you continue, confirm that the client has connected with this test." + ] + }, + { + "cell_type": "code", + "execution_count": 8, "id": "25c618eb", "metadata": { "colab": { @@ -161,7 +183,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'name': 'instance-0000000011', 'cluster_name': 'd1bd36862ce54c7b903e2aacd4cd7f0a', 'cluster_uuid': 'tIkh0X_UQKmMFQKSfUw-VQ', 'version': {'number': '8.9.0', 'build_flavor': 'default', 'build_type': 'docker', 'build_hash': '8aa461beb06aa0417a231c345a1b8c38fb498a0d', 'build_date': '2023-07-19T14:43:58.555259655Z', 'build_snapshot': False, 'lucene_version': '9.7.0', 'minimum_wire_compatibility_version': '7.17.0', 'minimum_index_compatibility_version': '7.0.0'}, 'tagline': 'You Know, for Search'}\n" + "{'name': 'instance-0000000000', 'cluster_name': 'a72482be54904952ba46d53c3def7740', 'cluster_uuid': 'g8BE52TtT32pGBbRzP_oKA', 'version': {'number': '8.12.2', 'build_flavor': 'default', 'build_type': 'docker', 'build_hash': '48a287ab9497e852de30327444b0809e55d46466', 'build_date': '2024-02-19T10:04:32.774273190Z', 'build_snapshot': False, 'lucene_version': '9.9.2', 'minimum_wire_compatibility_version': '7.17.0', 'minimum_index_compatibility_version': '7.0.0'}, 'tagline': 'You Know, for Search'}\n" ] } ], @@ -195,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "id": "_OAahfg-tqrf", "metadata": { "colab": { @@ -211,7 +233,7 @@ "ObjectApiResponse({'acknowledged': True})" ] }, - "execution_count": 5, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -232,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "6bc95238", "metadata": { "id": "6bc95238" @@ -244,7 +266,7 @@ "ObjectApiResponse({'acknowledged': True, 'shards_acknowledged': True, 'index': 'book_index'})" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -281,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "008d723e", "metadata": { "id": "008d723e" @@ -290,10 +312,10 @@ { "data": { "text/plain": [ - "ObjectApiResponse({'took': 49, 'errors': False, 'items': [{'index': {'_index': 'book_index', '_id': 'HwOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 0, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'IAOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 1, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'IQOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 2, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'IgOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 3, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'IwOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 4, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'JAOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 5, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'JQOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 6, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'JgOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 7, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'JwOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 8, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'KAOa7osBiUNHLMdf3q2r', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 9, '_primary_term': 1, 'status': 201}}]})" + "ObjectApiResponse({'errors': False, 'took': 88, 'items': [{'index': {'_index': 'book_index', '_id': 'caRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 0, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'cqRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 1, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'c6RpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 2, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'dKRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 3, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'daRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 4, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'dqRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 5, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'd6RpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 6, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'eKRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 7, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'eaRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 8, '_primary_term': 1, 'status': 201}}, {'index': {'_index': 'book_index', '_id': 'eqRpvY4BKY8PuI1qPluy', '_version': 1, 'result': 'created', 'forced_refresh': True, '_shards': {'total': 2, 'successful': 2, 'failed': 0}, '_seq_no': 9, '_primary_term': 1, 'status': 201}}]})" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -330,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "f12ce2c9", "metadata": { "id": "f12ce2c9" @@ -369,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "Df7hwcIjYwMT", "metadata": { "colab": { @@ -384,16 +406,16 @@ "output_type": "stream", "text": [ "\n", - "ID: JwOa7osBiUNHLMdf3q2r\n", + "ID: eaRpvY4BKY8PuI1qPluy\n", "Publication date: 2008-05-15\n", "Title: JavaScript: The Good Parts\n", "Summary: A deep dive into the parts of JavaScript that are essential to writing maintainable code\n", "Publisher: oreilly\n", "Reviews: 51\n", "Authors: ['douglas crockford']\n", - "Score: 0.80428284\n", + "Score: 0.8042828\n", "\n", - "ID: IwOa7osBiUNHLMdf3q2r\n", + "ID: daRpvY4BKY8PuI1qPluy\n", "Publication date: 2015-03-27\n", "Title: You Don't Know JS: Up & Going\n", "Summary: Introduction to JavaScript and programming as a whole\n", @@ -402,7 +424,7 @@ "Authors: ['kyle simpson']\n", "Score: 0.6989136\n", "\n", - "ID: JAOa7osBiUNHLMdf3q2r\n", + "ID: dqRpvY4BKY8PuI1qPluy\n", "Publication date: 2018-12-04\n", "Title: Eloquent JavaScript\n", "Summary: A modern introduction to programming\n", @@ -411,25 +433,25 @@ "Authors: ['marijn haverbeke']\n", "Score: 0.6796988\n", "\n", - "ID: HwOa7osBiUNHLMdf3q2r\n", + "ID: caRpvY4BKY8PuI1qPluy\n", "Publication date: 2019-10-29\n", "Title: The Pragmatic Programmer: Your Journey to Mastery\n", "Summary: A guide to pragmatic programming for software engineers and developers\n", "Publisher: addison-wesley\n", "Reviews: 30\n", "Authors: ['andrew hunt', 'david thomas']\n", - "Score: 0.62065494\n", + "Score: 0.6206549\n", "\n", - "ID: KAOa7osBiUNHLMdf3q2r\n", + "ID: eqRpvY4BKY8PuI1qPluy\n", "Publication date: 2012-06-27\n", "Title: Introduction to the Theory of Computation\n", "Summary: Introduction to the theory of computation and complexity theory\n", "Publisher: cengage learning\n", "Reviews: 33\n", "Authors: ['michael sipser']\n", - "Score: 0.6008769\n", + "Score: 0.60087687\n", "\n", - "ID: JgOa7osBiUNHLMdf3q2r\n", + "ID: eKRpvY4BKY8PuI1qPluy\n", "Publication date: 2011-05-13\n", "Title: The Clean Coder: A Code of Conduct for Professional Programmers\n", "Summary: A guide to professional conduct in the field of software engineering\n", @@ -438,7 +460,7 @@ "Authors: ['robert c. martin']\n", "Score: 0.571234\n", "\n", - "ID: JQOa7osBiUNHLMdf3q2r\n", + "ID: d6RpvY4BKY8PuI1qPluy\n", "Publication date: 1994-10-31\n", "Title: Design Patterns: Elements of Reusable Object-Oriented Software\n", "Summary: Guide to design patterns that can be used in any object-oriented language\n", @@ -447,32 +469,32 @@ "Authors: ['erich gamma', 'richard helm', 'ralph johnson', 'john vlissides']\n", "Score: 0.56499225\n", "\n", - "ID: IQOa7osBiUNHLMdf3q2r\n", + "ID: c6RpvY4BKY8PuI1qPluy\n", "Publication date: 2020-04-06\n", "Title: Artificial Intelligence: A Modern Approach\n", "Summary: Comprehensive introduction to the theory and practice of artificial intelligence\n", "Publisher: pearson\n", "Reviews: 39\n", "Authors: ['stuart russell', 'peter norvig']\n", - "Score: 0.56054837\n", + "Score: 0.5605484\n", "\n", - "ID: IgOa7osBiUNHLMdf3q2r\n", + "ID: dKRpvY4BKY8PuI1qPluy\n", "Publication date: 2008-08-11\n", "Title: Clean Code: A Handbook of Agile Software Craftsmanship\n", "Summary: A guide to writing code that is easy to read, understand and maintain\n", "Publisher: prentice hall\n", "Reviews: 55\n", "Authors: ['robert c. martin']\n", - "Score: 0.54226947\n", + "Score: 0.5422694\n", "\n", - "ID: IAOa7osBiUNHLMdf3q2r\n", + "ID: cqRpvY4BKY8PuI1qPluy\n", "Publication date: 2019-05-03\n", "Title: Python Crash Course\n", "Summary: A fast-paced, no-nonsense guide to programming in Python\n", "Publisher: no starch press\n", "Reviews: 42\n", "Authors: ['eric matthes']\n", - "Score: 0.5254088\n" + "Score: 0.52540874\n" ] } ], @@ -525,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "WoE0yTchfj3A", "metadata": { "id": "WoE0yTchfj3A" @@ -536,16 +558,16 @@ "output_type": "stream", "text": [ "\n", - "ID: HwOa7osBiUNHLMdf3q2r\n", + "ID: caRpvY4BKY8PuI1qPluy\n", "Publication date: 2019-10-29\n", "Title: The Pragmatic Programmer: Your Journey to Mastery\n", "Summary: A guide to pragmatic programming for software engineers and developers\n", "Publisher: addison-wesley\n", "Reviews: 30\n", "Authors: ['andrew hunt', 'david thomas']\n", - "Score: 0.62065494\n", + "Score: 0.6206549\n", "\n", - "ID: JQOa7osBiUNHLMdf3q2r\n", + "ID: d6RpvY4BKY8PuI1qPluy\n", "Publication date: 1994-10-31\n", "Title: Design Patterns: Elements of Reusable Object-Oriented Software\n", "Summary: Guide to design patterns that can be used in any object-oriented language\n", @@ -570,6 +592,14 @@ "\n", "pretty_response(response)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9edaa20-b8e8-4ce4-99b1-58b81de29dd5", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -591,7 +621,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.3" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/x-pack/plugins/search_notebooks/server/data/01_keyword_querying_filtering.json b/x-pack/plugins/search_notebooks/server/data/01_keyword_querying_filtering.json index 308b65782a3797..fa05b7d00bb109 100644 --- a/x-pack/plugins/search_notebooks/server/data/01_keyword_querying_filtering.json +++ b/x-pack/plugins/search_notebooks/server/data/01_keyword_querying_filtering.json @@ -8,7 +8,7 @@ "source": [ "# Keyword querying and filtering\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/elasticsearch-labs/blob/main/search/01-keyword-querying-filtering.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/elastic/elasticsearch-labs/blob/main/notebooks/search/01-keyword-querying-filtering.ipynb)\n", "\n", "This interactive notebook will introduce you to the basic Elasticsearch queries, using the official Elasticsearch Python client. Before getting started on this section you should work through our [quick start](https://github.com/elastic/elasticsearch-labs/blob/main/notebooks/search/00-quick-start.ipynb), as you will be using the same dataset." ] @@ -67,6 +67,44 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Enable Telemetry\n", + "\n", + "Knowing that you are using this notebook helps us decide where to invest our efforts to improve our products. We would like to ask you that you run the following code to let us gather anonymous usage statistics. See [telemetry.py](https://github.com/elastic/elasticsearch-labs/blob/main/telemetry/telemetry.py) for details. Thank you!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!curl -O -s https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/telemetry/telemetry.py\n", + "from telemetry import enable_telemetry\n", + "\n", + "client = enable_telemetry(client, \"01-keyword-querying-filtering\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Test the Client\n", + "Before you continue, confirm that the client has connected with this test." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(client.info())" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -899,7 +937,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.3" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/x-pack/plugins/search_notebooks/server/data/02_hybrid_search.json b/x-pack/plugins/search_notebooks/server/data/02_hybrid_search.json index c5e9fd22caad68..3dbe93a3b15c27 100644 --- a/x-pack/plugins/search_notebooks/server/data/02_hybrid_search.json +++ b/x-pack/plugins/search_notebooks/server/data/02_hybrid_search.json @@ -115,6 +115,27 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Enable Telemetry\n", + "\n", + "Knowing that you are using this notebook helps us decide where to invest our efforts to improve our products. We would like to ask you that you run the following code to let us gather anonymous usage statistics. See [telemetry.py](https://github.com/elastic/elasticsearch-labs/blob/main/telemetry/telemetry.py) for details. Thank you!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!curl -O -s https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/telemetry/telemetry.py\n", + "from telemetry import enable_telemetry\n", + "\n", + "client = enable_telemetry(client, \"02-hybrid-search\")" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -122,7 +143,8 @@ "id": "bRHbecNeEDL3" }, "source": [ - "Confirm that the client has connected with this test" + "### Test the Client\n", + "Before you continue, confirm that the client has connected with this test." ] }, { @@ -293,7 +315,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.3" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/x-pack/plugins/search_notebooks/server/data/03_elser.json b/x-pack/plugins/search_notebooks/server/data/03_elser.json index c6c5e6afcbc3fc..303dfb3c8dcdd5 100644 --- a/x-pack/plugins/search_notebooks/server/data/03_elser.json +++ b/x-pack/plugins/search_notebooks/server/data/03_elser.json @@ -117,6 +117,27 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Enable Telemetry\n", + "\n", + "Knowing that you are using this notebook helps us decide where to invest our efforts to improve our products. We would like to ask you that you run the following code to let us gather anonymous usage statistics. See [telemetry.py](https://github.com/elastic/elasticsearch-labs/blob/main/telemetry/telemetry.py) for details. Thank you!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!curl -O -s https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/telemetry/telemetry.py\n", + "from telemetry import enable_telemetry\n", + "\n", + "client = enable_telemetry(client, \"03-ELSER\")" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -124,7 +145,8 @@ "id": "bRHbecNeEDL3" }, "source": [ - "Confirm that the client has connected with this test" + "### Test the Client\n", + "Before you continue, confirm that the client has connected with this test." ] }, { @@ -539,7 +561,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.6" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/x-pack/plugins/search_notebooks/server/data/04_multilingual.json b/x-pack/plugins/search_notebooks/server/data/04_multilingual.json index 9b41984a69035e..5071f103759c4a 100644 --- a/x-pack/plugins/search_notebooks/server/data/04_multilingual.json +++ b/x-pack/plugins/search_notebooks/server/data/04_multilingual.json @@ -255,6 +255,27 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Enable Telemetry\n", + "\n", + "Knowing that you are using this notebook helps us decide where to invest our efforts to improve our products. We would like to ask you that you run the following code to let us gather anonymous usage statistics. See [telemetry.py](https://github.com/elastic/elasticsearch-labs/blob/main/telemetry/telemetry.py) for details. Thank you!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!curl -O -s https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/telemetry/telemetry.py\n", + "from telemetry import enable_telemetry\n", + "\n", + "client = enable_telemetry(client, \"04-multilingual\")" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -262,7 +283,8 @@ "id": "bRHbecNeEDL3" }, "source": [ - "Confirm that the client has connected with this test" + "### Test the Client\n", + "Before you continue, confirm that the client has connected with this test." ] }, { @@ -653,7 +675,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.3" + "version": "3.10.13" }, "vscode": { "interpreter": { From 9e109aff36e66b7eb3ee07115349180b04188774 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Tue, 21 May 2024 11:58:04 -0700 Subject: [PATCH 70/97] [UII] Fix Fleet Kibana SOs not loading on `_debug` page (#183948) ## Summary As the title says :) --- .../fleet/sections/debug/components/saved_object_debugger.tsx | 3 ++- .../sections/debug/components/saved_object_names_combo.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx index 021608e4ef6561..40f0c8e70a59b0 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx @@ -29,6 +29,7 @@ import { PACKAGES_SAVED_OBJECT_TYPE, DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + INGEST_SAVED_OBJECT_INDEX, } from '../../../../../../common/constants'; import { CodeBlock } from './code_block'; @@ -36,7 +37,7 @@ import { SavedObjectNamesCombo } from './saved_object_names_combo'; const fetchSavedObjects = async (type?: string, name?: string) => { if (!type || !name) return; - const path = `/.kibana/_search`; + const path = `/${INGEST_SAVED_OBJECT_INDEX}/_search`; const body = { query: { bool: { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx index aa9d7cb011e83b..356d591fa2bf6c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx @@ -12,9 +12,10 @@ import { EuiComboBox } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { sendRequest } from '../../../hooks'; +import { INGEST_SAVED_OBJECT_INDEX } from '../../../../../../common/constants'; const fetchSavedObjectNames = async (type: string) => { - const path = `/.kibana/_search`; + const path = `/${INGEST_SAVED_OBJECT_INDEX}/_search`; const body = { size: 0, query: { From 56eb280bc29ed70e20bb57a656bdc10d04ebfb64 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 21 May 2024 20:53:27 +0100 Subject: [PATCH 71/97] skip flaky suite (#183941) --- .../detection_engine/rule_edit/new_terms_rule.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/new_terms_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/new_terms_rule.cy.ts index 521c786bcbb212..63ba3e876c7d40 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/new_terms_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_edit/new_terms_rule.cy.ts @@ -52,7 +52,8 @@ describe( deleteAlertsAndRules(); }); - describe('with suppression configured', () => { + // FLAKY: https://github.com/elastic/kibana/issues/183941 + describe.skip('with suppression configured', () => { beforeEach(() => { createRule({ ...rule, From e759c4050536961844d7e5ec5ca58035b036a8b1 Mon Sep 17 00:00:00 2001 From: seanrathier Date: Tue, 21 May 2024 15:55:53 -0400 Subject: [PATCH 72/97] [Cloud Security] Disable/Enable rule takes too long (#182768) --- .../public/common/api/use_stats_api.ts | 8 +- .../pages/rules/change_csp_rule_state.ts | 44 --- .../public/pages/rules/rules_container.tsx | 8 +- .../public/pages/rules/rules_flyout.tsx | 13 +- .../public/pages/rules/rules_table.tsx | 60 ++-- .../public/pages/rules/rules_table_header.tsx | 22 +- .../rules/use_change_csp_rule_state.test.tsx | 333 ++++++++++++++++++ .../pages/rules/use_change_csp_rule_state.ts | 100 ++++++ .../public/pages/rules/use_csp_rules_state.ts | 4 +- 9 files changed, 479 insertions(+), 113 deletions(-) delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/rules/change_csp_rule_state.ts create mode 100644 x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.test.tsx create mode 100644 x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.ts diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_stats_api.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_stats_api.ts index db6883810d672e..e973633210d9c5 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/api/use_stats_api.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_stats_api.ts @@ -15,8 +15,8 @@ import { } from '../../../common/constants'; // TODO: consolidate both hooks into one hook with a dynamic key -export const getCspmStatsKey = ['csp_cspm_dashboard_stats']; -export const getKspmStatsKey = ['csp_kspm_dashboard_stats']; +export const CSPM_STATS_QUERY_KEY = ['csp_cspm_dashboard_stats']; +export const KSPM_STATS_QUERY_KEY = ['csp_kspm_dashboard_stats']; export const getStatsRoute = (policyTemplate: PosturePolicyTemplate) => { return STATS_ROUTE_PATH.replace('{policy_template}', policyTemplate); @@ -27,7 +27,7 @@ export const useCspmStatsApi = ( ) => { const { http } = useKibana().services; return useQuery( - getCspmStatsKey, + CSPM_STATS_QUERY_KEY, () => http.get(getStatsRoute(CSPM_POLICY_TEMPLATE), { version: '2' }), options @@ -39,7 +39,7 @@ export const useKspmStatsApi = ( ) => { const { http } = useKibana().services; return useQuery( - getKspmStatsKey, + KSPM_STATS_QUERY_KEY, () => http.get(getStatsRoute(KSPM_POLICY_TEMPLATE), { version: '2' }), options diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/change_csp_rule_state.ts b/x-pack/plugins/cloud_security_posture/public/pages/rules/change_csp_rule_state.ts deleted file mode 100644 index a574ec5f3efee4..00000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/change_csp_rule_state.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { useQueryClient } from '@tanstack/react-query'; -import { getRuleStatesKey } from '../configurations/latest_findings/use_get_benchmark_rules_state_api'; -import { getCspmStatsKey, getKspmStatsKey } from '../../common/api'; -import { BENCHMARK_INTEGRATION_QUERY_KEY_V2 } from '../benchmarks/use_csp_benchmark_integrations'; -import { - CspBenchmarkRulesBulkActionRequestSchema, - RuleStateAttributes, -} from '../../../common/types/latest'; -import { CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH } from '../../../common/constants'; - -export type RuleStateAttributesWithoutStates = Omit; -export const useChangeCspRuleState = () => { - const { http } = useKibana().services; - const queryClient = useQueryClient(); - - return async (actionOnRule: 'mute' | 'unmute', ruleIds: RuleStateAttributesWithoutStates[]) => { - const query = { - action: actionOnRule, - rules: ruleIds, - }; - - const cspRuleBulkActionResponse = await http?.post( - CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH, - { - version: '1', - body: JSON.stringify(query), - } - ); - await queryClient.invalidateQueries(BENCHMARK_INTEGRATION_QUERY_KEY_V2); // causing rules counters refetch - await queryClient.invalidateQueries(getCspmStatsKey); // causing cloud dashboard refetch - await queryClient.invalidateQueries(getKspmStatsKey); // causing kubernetes dashboard refetch - await queryClient.invalidateQueries(getRuleStatesKey); // the rule states are part of the findings query key, invalidating them will cause the latest findings to refetch only after the rules states were changed - - return cspRuleBulkActionResponse; - }; -}; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx index d50a351a0f1b6b..c134e405f8a3c4 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx @@ -245,7 +245,6 @@ export const RulesContainer = () => { pageSize={rulesPageData.rules_page.length} isSearching={status === 'loading'} selectedRules={selectedRules} - refetchRulesStates={rulesStates.refetch} setEnabledDisabledItemsFilter={setEnabledDisabledItemsFilter} enabledDisabledItemsFilterState={enabledDisabledItemsFilter} setSelectAllRules={setSelectAllRules} @@ -268,16 +267,11 @@ export const RulesContainer = () => { }} selectedRuleId={params.ruleId} onRuleClick={navToRuleFlyout} - refetchRulesStates={rulesStates.refetch} selectedRules={selectedRules} setSelectedRules={setSelectedRules} /> {params.ruleId && rulesFlyoutData.metadata && ( - + )} ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_flyout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_flyout.tsx index 7168b1f3efc201..3777646917e4ad 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_flyout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_flyout.tsx @@ -29,7 +29,7 @@ import { CspBenchmarkRuleMetadata } from '../../../common/types/latest'; import { getRuleList } from '../configurations/findings_flyout/rule_tab'; import { getRemediationList } from '../configurations/findings_flyout/overview_tab'; import * as TEST_SUBJECTS from './test_subjects'; -import { useChangeCspRuleState } from './change_csp_rule_state'; +import { useChangeCspRuleState } from './use_change_csp_rule_state'; import { CspBenchmarkRulesWithStates } from './rules_container'; import { showChangeBenchmarkRuleStatesSuccessToast, @@ -43,7 +43,6 @@ export const RULES_FLYOUT_SWITCH_BUTTON = 'rule-flyout-switch-button'; interface RuleFlyoutProps { onClose(): void; rule: CspBenchmarkRulesWithStates; - refetchRulesStates: () => void; } const tabs = [ @@ -65,9 +64,9 @@ const tabs = [ type RuleTab = typeof tabs[number]['id']; -export const RuleFlyout = ({ onClose, rule, refetchRulesStates }: RuleFlyoutProps) => { +export const RuleFlyout = ({ onClose, rule }: RuleFlyoutProps) => { const [tab, setTab] = useState('overview'); - const postRequestChangeRulesStates = useChangeCspRuleState(); + const { mutate: mutateRuleState } = useChangeCspRuleState(); const { data: rulesData } = useFetchDetectionRulesByTags( getFindingsDetectionRuleSearchTags(rule.metadata) ); @@ -84,8 +83,10 @@ export const RuleFlyout = ({ onClose, rule, refetchRulesStates }: RuleFlyoutProp rule_id: rule.metadata.id, }; const nextRuleStates = isRuleMuted ? 'unmute' : 'mute'; - await postRequestChangeRulesStates(nextRuleStates, [rulesObjectRequest]); - refetchRulesStates(); + await mutateRuleState({ + newState: nextRuleStates, + ruleIds: [rulesObjectRequest], + }); showChangeBenchmarkRuleStatesSuccessToast(startServices, isRuleMuted, { numberOfRules: 1, numberOfDetectionRules: rulesData?.total || 0, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx index a9e4b0501cfdf3..05bed9ce85cd30 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Criteria, EuiButtonEmpty, @@ -27,7 +27,7 @@ import { getFindingsDetectionRuleSearchTags } from '../../../common/utils/detect import { ColumnNameWithTooltip } from '../../components/column_name_with_tooltip'; import type { CspBenchmarkRulesWithStates, RulesState } from './rules_container'; import * as TEST_SUBJECTS from './test_subjects'; -import { RuleStateAttributesWithoutStates, useChangeCspRuleState } from './change_csp_rule_state'; +import { RuleStateUpdateRequest, useChangeCspRuleState } from './use_change_csp_rule_state'; import { showChangeBenchmarkRuleStatesSuccessToast } from '../../components/take_action'; import { fetchDetectionRulesByTags } from '../../common/api/use_fetch_detection_rules_by_tags'; @@ -41,7 +41,6 @@ type RulesTableProps = Pick< setPagination(pagination: Pick): void; onRuleClick: (ruleID: string) => void; selectedRuleId?: string; - refetchRulesStates: () => void; selectedRules: CspBenchmarkRulesWithStates[]; setSelectedRules: (rules: CspBenchmarkRulesWithStates[]) => void; onSortChange: (value: 'asc' | 'desc') => void; @@ -49,12 +48,9 @@ type RulesTableProps = Pick< type GetColumnProps = Pick< RulesTableProps, - 'onRuleClick' | 'refetchRulesStates' | 'selectedRules' | 'setSelectedRules' + 'onRuleClick' | 'selectedRules' | 'setSelectedRules' > & { - postRequestChangeRulesStates: ( - actionOnRule: 'mute' | 'unmute', - ruleIds: RuleStateAttributesWithoutStates[] - ) => void; + mutateRulesStates: (ruleStateUpdateRequest: RuleStateUpdateRequest) => void; items: CspBenchmarkRulesWithStates[]; setIsAllRulesSelectedThisPage: (isAllRulesSelected: boolean) => void; isAllRulesSelectedThisPage: boolean; @@ -75,7 +71,6 @@ export const RulesTable = ({ loading, error, selectedRuleId, - refetchRulesStates, selectedRules, setSelectedRules, onRuleClick, @@ -116,7 +111,7 @@ export const RulesTable = ({ const [isAllRulesSelectedThisPage, setIsAllRulesSelectedThisPage] = useState(false); - const postRequestChangeRulesStates = useChangeCspRuleState(); + const { mutate: mutateRulesStates } = useChangeCspRuleState(); const isCurrentPageRulesASubset = ( currentPageRulesArray: CspBenchmarkRulesWithStates[], @@ -140,35 +135,19 @@ export const RulesTable = ({ else setIsAllRulesSelectedThisPage(false); }, [items.length, selectedRules.length]); - const columns = useMemo(() => { - const startServices = { notifications, analytics, i18n: i18nStart, theme }; - return getColumns({ - refetchRulesStates, - postRequestChangeRulesStates, - selectedRules, - setSelectedRules, - items, - setIsAllRulesSelectedThisPage, - isAllRulesSelectedThisPage, - isCurrentPageRulesASubset, - onRuleClick, - http, - startServices, - }); - }, [ - refetchRulesStates, - postRequestChangeRulesStates, + const startServices = { notifications, analytics, i18n: i18nStart, theme }; + const columns = getColumns({ + mutateRulesStates, selectedRules, setSelectedRules, items, + setIsAllRulesSelectedThisPage, isAllRulesSelectedThisPage, + isCurrentPageRulesASubset, onRuleClick, - notifications, http, - analytics, - i18nStart, - theme, - ]); + startServices, + }); return ( <> @@ -189,8 +168,7 @@ export const RulesTable = ({ }; const getColumns = ({ - refetchRulesStates, - postRequestChangeRulesStates, + mutateRulesStates, selectedRules, setSelectedRules, items, @@ -316,18 +294,22 @@ const getColumns = ({ const changeCspRuleStateFn = async () => { if (rule?.metadata.benchmark.rule_number) { // Calling this function this way to make sure it didn't get called on every single row render, its only being called when user click on the switch button - const detectionRuleCount = ( + const detectionRulesForSelectedRule = ( await fetchDetectionRulesByTags( getFindingsDetectionRuleSearchTags(rule.metadata), { match: 'all' }, http ) ).total; - postRequestChangeRulesStates(nextRuleState, [rulesObjectRequest]); - refetchRulesStates(); + + mutateRulesStates({ + newState: nextRuleState, + ruleIds: [rulesObjectRequest], + }); + showChangeBenchmarkRuleStatesSuccessToast(startServices, isRuleMuted, { numberOfRules: 1, - numberOfDetectionRules: detectionRuleCount || 0, + numberOfDetectionRules: detectionRulesForSelectedRule || 0, }); } }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx index 58a4ad46986ebb..5aa8aae1dc590a 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx @@ -26,7 +26,10 @@ import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; import { useKibana } from '../../common/hooks/use_kibana'; import { getFindingsDetectionRuleSearchTagsFromArrayOfRules } from '../../../common/utils/detection_rules'; -import { RuleStateAttributesWithoutStates, useChangeCspRuleState } from './change_csp_rule_state'; +import { + RuleStateAttributesWithoutStates, + useChangeCspRuleState, +} from './use_change_csp_rule_state'; import { CspBenchmarkRulesWithStates } from './rules_container'; import { MultiSelectFilter } from '../../common/component/multi_select_filter'; import { showChangeBenchmarkRuleStatesSuccessToast } from '../../components/take_action'; @@ -53,7 +56,6 @@ interface RulesTableToolbarProps { isSearching: boolean; pageSize: number; selectedRules: CspBenchmarkRulesWithStates[]; - refetchRulesStates: () => void; setEnabledDisabledItemsFilter: (filterState: string) => void; enabledDisabledItemsFilterState: string; setSelectAllRules: () => void; @@ -64,7 +66,6 @@ interface RuleTableCount { pageSize: number; total: number; selectedRules: CspBenchmarkRulesWithStates[]; - refetchRulesStates: () => void; setSelectAllRules: () => void; setSelectedRules: (rules: CspBenchmarkRulesWithStates[]) => void; } @@ -80,7 +81,6 @@ export const RulesTableHeader = ({ sectionSelectOptions, ruleNumberSelectOptions, selectedRules, - refetchRulesStates, setEnabledDisabledItemsFilter, enabledDisabledItemsFilterState, setSelectAllRules, @@ -198,7 +198,6 @@ export const RulesTableHeader = ({ pageSize={pageSize} total={totalRulesCount} selectedRules={selectedRules} - refetchRulesStates={refetchRulesStates} setSelectAllRules={setSelectAllRules} setSelectedRules={setSelectedRules} /> @@ -240,7 +239,6 @@ const CurrentPageOfTotal = ({ pageSize, total, selectedRules, - refetchRulesStates, setSelectAllRules, setSelectedRules, }: RuleTableCount) => { @@ -249,7 +247,8 @@ const CurrentPageOfTotal = ({ setIsPopoverOpen((e) => !e); }; - const { data: rulesData } = useFetchDetectionRulesByTags( + const { mutate: mutateRulesStates } = useChangeCspRuleState(); + const { data: detectionRulesForSelectedRules } = useFetchDetectionRulesByTags( getFindingsDetectionRuleSearchTagsFromArrayOfRules(selectedRules.map((rule) => rule.metadata)), { match: 'any' } ); @@ -257,7 +256,6 @@ const CurrentPageOfTotal = ({ const { notifications, analytics, i18n: i18nStart, theme } = useKibana().services; const startServices = { notifications, analytics, i18n: i18nStart, theme }; - const postRequestChangeRulesState = useChangeCspRuleState(); const changeRulesState = async (state: 'mute' | 'unmute') => { const bulkSelectedRules: RuleStateAttributesWithoutStates[] = selectedRules.map( (e: CspBenchmarkRulesWithStates) => ({ @@ -269,12 +267,14 @@ const CurrentPageOfTotal = ({ ); // Only do the API Call IF there are no undefined value for rule number in the selected rules if (!bulkSelectedRules.some((rule) => rule.rule_number === undefined)) { - await postRequestChangeRulesState(state, bulkSelectedRules); - refetchRulesStates(); + mutateRulesStates({ + newState: state, + ruleIds: bulkSelectedRules, + }); setIsPopoverOpen(false); showChangeBenchmarkRuleStatesSuccessToast(startServices, state !== 'mute', { numberOfRules: bulkSelectedRules.length, - numberOfDetectionRules: rulesData?.total || 0, + numberOfDetectionRules: detectionRulesForSelectedRules?.total || 0, }); } }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.test.tsx new file mode 100644 index 00000000000000..cd205bb7f6b7bd --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.test.tsx @@ -0,0 +1,333 @@ +/* + * 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 { act, renderHook } from '@testing-library/react-hooks'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { + useChangeCspRuleState, + createRulesWithUpdatedState, + RuleStateUpdateRequest, +} from './use_change_csp_rule_state'; +import { CSP_RULES_STATES_QUERY_KEY } from './use_csp_rules_state'; +import { BENCHMARK_INTEGRATION_QUERY_KEY_V2 } from '../benchmarks/use_csp_benchmark_integrations'; +import { CSPM_STATS_QUERY_KEY, KSPM_STATS_QUERY_KEY } from '../../common/api'; +import { CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH } from '../../../common/constants'; +import { RuleStateAttributes } from '../../../common/types/rules/v4'; + +const initialRules = { + rule_1: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + muted: false, + }, + rule_2: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + muted: false, + }, + rule_3: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '3', + rule_id: 'rule_3', + muted: false, + }, +}; + +jest.mock('@kbn/kibana-react-plugin/public', () => ({ + useKibana: jest.fn().mockReturnValue({ + services: { + http: { + post: jest.fn(), + }, + }, + }), +})); + +const testWrapper = () => { + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + // this is needed to avoid the errors in the console that are cause by QueryClient` + logger: { + log: jest.fn(), + warn: jest.fn(), + error: () => {}, + }, + }); + + queryClient.setQueryData(CSP_RULES_STATES_QUERY_KEY, { ...initialRules }); + + return { + wrapper: ({ children }: { children: React.ReactNode | React.ReactNode[] }) => ( + {children} + ), + queryClient, + }; +}; + +describe('use_change_csp_rule_state', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should call http.post with the correct parameters', async () => { + const appMockRender = testWrapper(); + const httpPostSpy = jest.spyOn(useKibana().services.http!, 'post'); + + const { result, waitForNextUpdate } = await renderHook(() => useChangeCspRuleState(), { + wrapper: appMockRender.wrapper, + }); + + const mockRuleStateUpdateRequest: RuleStateUpdateRequest = { + newState: 'mute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + ], + }; + + act(() => { + result.current.mutate(mockRuleStateUpdateRequest); + }); + + await waitForNextUpdate(); + + expect(httpPostSpy).toHaveBeenCalledWith(CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH, { + version: '1', + body: JSON.stringify({ + action: 'mute', + rules: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + ], + }), + }); + }); + + it('should cancel queries and update query data onMutate', async () => { + const appMockRender = testWrapper(); + const queryClientSpy = jest.spyOn(appMockRender.queryClient, 'cancelQueries'); + const queryClientGetSpy = jest.spyOn(appMockRender.queryClient, 'getQueryData'); + const mockSetQueryDataSpy = jest.spyOn(appMockRender.queryClient, 'setQueryData'); + + const { result, waitForNextUpdate } = await renderHook(() => useChangeCspRuleState(), { + wrapper: appMockRender.wrapper, + }); + + const mockRuleStateUpdateRequest: RuleStateUpdateRequest = { + newState: 'mute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + ], + }; + + act(() => { + result.current.mutate(mockRuleStateUpdateRequest); + }); + + await waitForNextUpdate(); + + const expectedMutatedRules = { + ...initialRules, + rule_1: { ...initialRules.rule_1, muted: true }, + }; + + expect(queryClientSpy).toHaveBeenCalled(); + expect(queryClientGetSpy).toHaveBeenCalled(); + expect(mockSetQueryDataSpy).toHaveBeenCalled(); + expect(mockSetQueryDataSpy).toHaveReturnedWith(expectedMutatedRules); + }); + + it('should invalidate queries onSettled', async () => { + const appMockRender = testWrapper(); + const mockInvalidateQueriesSpy = jest.spyOn(appMockRender.queryClient, 'invalidateQueries'); + + const { result, waitForNextUpdate } = await renderHook(() => useChangeCspRuleState(), { + wrapper: appMockRender.wrapper, + }); + + const mockRuleStateUpdateRequest: RuleStateUpdateRequest = { + newState: 'mute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + ], + }; + + act(() => { + result.current.mutate(mockRuleStateUpdateRequest); + }); + + await waitForNextUpdate(); + + expect(mockInvalidateQueriesSpy).toHaveBeenCalledWith(BENCHMARK_INTEGRATION_QUERY_KEY_V2); + expect(mockInvalidateQueriesSpy).toHaveBeenCalledWith(CSPM_STATS_QUERY_KEY); + expect(mockInvalidateQueriesSpy).toHaveBeenCalledWith(KSPM_STATS_QUERY_KEY); + expect(mockInvalidateQueriesSpy).toHaveBeenCalledWith(CSP_RULES_STATES_QUERY_KEY); + }); + + it('should restore previous query data onError', async () => { + const appMockRender = testWrapper(); + const mockSetQueryDataSpy = jest.spyOn(appMockRender.queryClient, 'setQueryData'); + + const { result, waitForNextUpdate } = await renderHook(() => useChangeCspRuleState(), { + wrapper: appMockRender.wrapper, + }); + + const mockRuleStateUpdateRequest: RuleStateUpdateRequest = { + newState: 'mute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + // forcing an error by providing a ruleId that does not exist in the cache + rule_id: 'shouldnotexist', + }, + ], + }; + + act(() => { + result.current.mutate(mockRuleStateUpdateRequest); + }); + + await waitForNextUpdate(); + + expect(mockSetQueryDataSpy).toHaveBeenCalled(); + expect(mockSetQueryDataSpy).toHaveReturnedWith(initialRules); + }); + + it('creates the new set of cache rules in a muted state when calling createRulesWithUpdatedState', async () => { + const request: RuleStateUpdateRequest = { + newState: 'mute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + }, + ], + }; + + const updateRules: Record = { + rule_1: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + muted: true, + }, + rule_2: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + muted: true, + }, + }; + + const newRulesState = createRulesWithUpdatedState(request, initialRules); + expect(newRulesState).toEqual({ ...initialRules, ...updateRules }); + }); + + it('creates the new cache with rules in a unmute state', async () => { + const initialMutedRules: Record = { + rule_1: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + muted: true, + }, + rule_2: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + muted: true, + }, + rule_3: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '3', + rule_id: 'rule_3', + muted: false, + }, + }; + + const request: RuleStateUpdateRequest = { + newState: 'unmute', + ruleIds: [ + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + }, + { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + }, + ], + }; + + const updateRules: Record = { + rule_1: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '1', + rule_id: 'rule_1', + muted: false, + }, + rule_2: { + benchmark_id: 'benchmark_id', + benchmark_version: 'benchmark_version', + rule_number: '2', + rule_id: 'rule_2', + muted: false, + }, + }; + + const newRulesState = createRulesWithUpdatedState(request, initialMutedRules); + expect(newRulesState).toEqual({ ...initialMutedRules, ...updateRules }); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.ts b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.ts new file mode 100644 index 00000000000000..bbf175b107f6ed --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_change_csp_rule_state.ts @@ -0,0 +1,100 @@ +/* + * 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 { useKibana } from '@kbn/kibana-react-plugin/public'; +import { useQueryClient, useMutation } from '@tanstack/react-query'; +import { CSP_RULES_STATES_QUERY_KEY } from './use_csp_rules_state'; +import { CSPM_STATS_QUERY_KEY, KSPM_STATS_QUERY_KEY } from '../../common/api'; +import { BENCHMARK_INTEGRATION_QUERY_KEY_V2 } from '../benchmarks/use_csp_benchmark_integrations'; +import { + CspBenchmarkRulesBulkActionRequestSchema, + RuleStateAttributes, +} from '../../../common/types/latest'; +import { CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH } from '../../../common/constants'; + +export type RuleStateAttributesWithoutStates = Omit; +export interface RuleStateUpdateRequest { + newState: 'mute' | 'unmute'; + ruleIds: RuleStateAttributesWithoutStates[]; +} + +export const useChangeCspRuleState = () => { + const { http } = useKibana().services; + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async (ruleStateUpdateRequest: RuleStateUpdateRequest) => { + await http?.post( + CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH, + { + version: '1', + body: JSON.stringify({ + action: ruleStateUpdateRequest.newState, + rules: ruleStateUpdateRequest.ruleIds, + }), + } + ); + }, + onMutate: async (ruleStateUpdateRequest: RuleStateUpdateRequest) => { + // Cancel any outgoing refetches (so they don't overwrite our optimistic update) + await queryClient.cancelQueries(CSP_RULES_STATES_QUERY_KEY); + + // Snapshot the previous rules + const previousCspRules = queryClient.getQueryData(CSP_RULES_STATES_QUERY_KEY); + + // Optimistically update to the rules that have state changes + queryClient.setQueryData( + CSP_RULES_STATES_QUERY_KEY, + (currentRuleStates: Record | undefined) => { + if (!currentRuleStates) { + return currentRuleStates; + } + return createRulesWithUpdatedState(ruleStateUpdateRequest, currentRuleStates); + } + ); + + // Return a context object with the previous value + return { previousCspRules }; + }, + onSettled: () => { + queryClient.invalidateQueries(BENCHMARK_INTEGRATION_QUERY_KEY_V2); + queryClient.invalidateQueries(CSPM_STATS_QUERY_KEY); + queryClient.invalidateQueries(KSPM_STATS_QUERY_KEY); + queryClient.invalidateQueries(CSP_RULES_STATES_QUERY_KEY); + }, + onError: (err, variables, context) => { + if (context?.previousCspRules) { + queryClient.setQueryData(CSP_RULES_STATES_QUERY_KEY, context.previousCspRules); + } + }, + }); +}; + +export function createRulesWithUpdatedState( + ruleStateUpdateRequest: RuleStateUpdateRequest, + currentRuleStates: Record +) { + const updateRuleStates: Record = {}; + ruleStateUpdateRequest.ruleIds.forEach((ruleId) => { + const matchingRuleKey = Object.keys(currentRuleStates).find( + (key) => currentRuleStates[key].rule_id === ruleId.rule_id + ); + if (matchingRuleKey) { + const updatedRule = { + ...currentRuleStates[matchingRuleKey], + muted: ruleStateUpdateRequest.newState === 'mute', + }; + + updateRuleStates[matchingRuleKey] = updatedRule; + } + }); + + return { + ...currentRuleStates, + ...updateRuleStates, + }; +} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts index da34cf8b247c76..e712b130e16514 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts @@ -10,13 +10,13 @@ import { CspBenchmarkRulesStates } from '../../../common/types/latest'; import { CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH } from '../../../common/constants'; import { useKibana } from '../../common/hooks/use_kibana'; -const QUERY_KEY_V1 = 'csp_rules_states_v1'; +export const CSP_RULES_STATES_QUERY_KEY = ['csp_rules_states_v1']; export const useCspGetRulesStates = () => { const { http } = useKibana().services; return useQuery( - [QUERY_KEY_V1], + CSP_RULES_STATES_QUERY_KEY, () => http.get(CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH, { version: '1', From 4b2afc8461ae2d1804b1daef8b79eca39c3b3905 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Tue, 21 May 2024 15:59:51 -0400 Subject: [PATCH 73/97] [Security Solution][Endpoint] Enable `responseActionsSentinelOneV2Enabled` feature flag in `main` (#183664) ## Summary - Enables the `responseActionsSentinelOneV2Enabled` feature flag for `main` - This same FF was enabled already in 8.14 via: https://github.com/elastic/kibana/pull/182384 - Changes the background task for completing response actions to have an initial timeout of `5m` (instead of `20m`) --- .../security_solution/common/experimental_features.ts | 2 +- x-pack/plugins/security_solution/server/config.ts | 2 +- .../lib/response_actions/complete_external_actions_task.ts | 2 +- .../clients/sentinelone/sentinel_one_actions_client.test.ts | 6 ++++++ .../test_suites/task_manager/check_registered_task_types.ts | 1 + 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index a11fb495795a96..1ce693d5d45671 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -84,7 +84,7 @@ export const allowedExperimentalValues = Object.freeze({ * * Release: v8.14.0 */ - responseActionsSentinelOneV2Enabled: false, + responseActionsSentinelOneV2Enabled: true, /** Enables the `get-file` response action for SentinelOne */ responseActionsSentinelOneGetFileEnabled: false, diff --git a/x-pack/plugins/security_solution/server/config.ts b/x-pack/plugins/security_solution/server/config.ts index 19e8afe176c9a3..3bfcf13a9104a5 100644 --- a/x-pack/plugins/security_solution/server/config.ts +++ b/x-pack/plugins/security_solution/server/config.ts @@ -128,7 +128,7 @@ export const configSchema = schema.object({ * Complete External Response Actions task: Timeout value for how long the task should run */ completeExternalResponseActionsTaskTimeout: schema.string({ - defaultValue: '20m', + defaultValue: '5m', validate: isValidTaskManagerDuration, }), diff --git a/x-pack/plugins/security_solution/server/endpoint/lib/response_actions/complete_external_actions_task.ts b/x-pack/plugins/security_solution/server/endpoint/lib/response_actions/complete_external_actions_task.ts index 8d77ddecbcf56b..fd823928b6631b 100644 --- a/x-pack/plugins/security_solution/server/endpoint/lib/response_actions/complete_external_actions_task.ts +++ b/x-pack/plugins/security_solution/server/endpoint/lib/response_actions/complete_external_actions_task.ts @@ -41,7 +41,7 @@ export class CompleteExternalResponseActionsTask { private log: Logger; private esClient: ElasticsearchClient | undefined = undefined; private cleanup: (() => void) | undefined; - private taskTimeout = '20m'; // Default. Real value comes from server config + private taskTimeout = '5m'; // Default. Real value comes from server config private taskInterval = '60s'; // Default. Real value comes from server config constructor(protected readonly options: CompleteExternalResponseActionsTaskConstructorOptions) { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts index 6fbcb6ff3350b2..df326a269f0a38 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts @@ -106,6 +106,9 @@ describe('SentinelOneActionsClient class', () => { }); it('should write action request and response to endpoint indexes when `responseActionsSentinelOneV2Enabled` FF is Disabled', async () => { + // @ts-expect-error updating readonly attribute + classConstructorOptions.endpointService.experimentalFeatures.responseActionsSentinelOneV2Enabled = + false; await s1ActionsClient.isolate(createS1IsolationOptions()); expect(classConstructorOptions.esClient.index).toHaveBeenCalledTimes(2); @@ -237,6 +240,9 @@ describe('SentinelOneActionsClient class', () => { }); it('should write action request and response to endpoint indexes when `responseActionsSentinelOneV2Enabled` is Disabled', async () => { + // @ts-expect-error updating readonly attribute + classConstructorOptions.endpointService.experimentalFeatures.responseActionsSentinelOneV2Enabled = + false; await s1ActionsClient.release(createS1IsolationOptions()); expect(classConstructorOptions.esClient.index).toHaveBeenCalledTimes(2); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index bafcb03cbe2116..163c416bea3144 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -131,6 +131,7 @@ export default function ({ getService }: FtrProviderContext) { 'cases-telemetry-task', 'cloud_security_posture-stats_task', 'dashboard_telemetry', + 'endpoint:complete-external-response-actions', 'endpoint:metadata-check-transforms-task', 'endpoint:user-artifact-packager', 'fleet:check-deleted-files-task', From 0963e0c9065fc0cef16770b59ad35d2eb517405c Mon Sep 17 00:00:00 2001 From: Dominique Clarke Date: Tue, 21 May 2024 16:05:34 -0400 Subject: [PATCH 74/97] [SLO] Add APM embeddables to APM failed transaction rate SLI (#183321) ## Summary Adds APM embeddables to the APM failed transaction rate SLI alert details page. ![image](https://github.com/elastic/kibana/assets/11356435/00df87d3-69dc-45a4-a2b6-fa9b9dc5a941) ### Testing 1. Generate some APM data. The easiest way to do so is to via `synthtrace`, for example `node scripts/synthtrace many_transactions.ts --live` 2. Navigate to the SLO page. Create an APM failed transaction rate SLI. 3. Wait for an alert to fire 4. Navigate to the alert details page for the alert to view the charts. 5. Navigate to the APM page for the service selected. Compare the charts to confirm the accuracy. 6. Ideally, you'd repeat this test with many different configurations of the SLI, for example an SLI with a specific environment, transaction type, or transaction name, and compare the charts from the APM page for accuracy. --- .../failed_transaction_chart.tsx | 52 ++++++++++++++-- .../chart.tsx | 6 ++ .../custom_panels/apm/apm_alert_details.tsx | 61 ++++++++++++++++--- .../custom_panels/apm/embeddable_root.tsx | 32 +++++++--- .../custom_panels/custom_panels.tsx | 18 +++++- 5 files changed, 144 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx index fae281c05b9084..4b43107861352c 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx @@ -6,12 +6,25 @@ */ /* Error Rate */ -import { EuiFlexItem, EuiPanel, EuiFlexGroup, EuiTitle, EuiIconTip } from '@elastic/eui'; +import React from 'react'; +import chroma from 'chroma-js'; +import { + EuiFlexItem, + EuiPanel, + EuiFlexGroup, + EuiTitle, + EuiIconTip, + RecursivePartial, + useEuiTheme, + transparentize, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { BoolQuery } from '@kbn/es-query'; -import React from 'react'; -import { RecursivePartial } from '@elastic/eui'; +import { UI_SETTINGS } from '@kbn/data-plugin/public'; import { Theme } from '@elastic/charts'; +import { AlertActiveTimeRangeAnnotation, AlertAnnotation } from '@kbn/observability-alert-details'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { DEFAULT_DATE_FORMAT } from './constants'; import { useFetcher } from '../../../../hooks/use_fetcher'; import { ChartType } from '../../../shared/charts/helper/get_timeseries_color'; import * as get_timeseries_color from '../../../shared/charts/helper/get_timeseries_color'; @@ -50,6 +63,8 @@ function FailedTransactionChart({ timeZone, kuery = '', filters, + alertStart, + alertEnd, }: { transactionType: string; transactionTypes?: string[]; @@ -63,7 +78,13 @@ function FailedTransactionChart({ timeZone: string; kuery?: string; filters?: BoolQuery; + alertStart?: number; + alertEnd?: number; }) { + const { euiTheme } = useEuiTheme(); + const { + services: { uiSettings }, + } = useKibana(); const { currentPeriodColor: currentPeriodColorErrorRate } = get_timeseries_color.getTimeSeriesColor(ChartType.FAILED_TRANSACTION_RATE); @@ -127,6 +148,28 @@ function FailedTransactionChart({ }, ]; const showTransactionTypeSelect = setTransactionType && transactionTypes; + const getFailedTransactionChartAdditionalData = () => { + if (alertStart) { + return [ + , + , + ]; + } + }; return ( @@ -158,7 +201,8 @@ function FailedTransactionChart({ ); } diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/apm_alert_details.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/apm_alert_details.tsx index 86893aa0fb87e5..4d1ff0d532fba3 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/apm_alert_details.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/apm_alert_details.tsx @@ -6,22 +6,26 @@ */ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; -import { GetSLOResponse, APMTransactionDurationIndicator } from '@kbn/slo-schema'; -import { APMEmbeddableRoot } from './embeddable_root'; +import { + APMEmbeddableRoot, + APMTransactionDurationSLOResponse, + APMErrorRateSLOResponse, +} from './embeddable_root'; import type { BurnRateRule, BurnRateAlert, TimeRange } from '../../../types'; -interface APMAlertDetailsProps { - slo: APMTransactionDurationSLOResponse; +interface APMAlertDetailsProps { + slo: IndicatorType; alert: BurnRateAlert; rule: BurnRateRule; dataTimeRange: TimeRange; } -export type APMTransactionDurationSLOResponse = GetSLOResponse & { - indicator: APMTransactionDurationIndicator; -}; - -export function APMAlertDetails({ slo, dataTimeRange, alert, rule }: APMAlertDetailsProps) { +export function APMLatencyAlertDetails({ + slo, + dataTimeRange, + alert, + rule, +}: APMAlertDetailsProps) { return ( ); } + +export function APMAvailabilityAlertDetails({ + slo, + dataTimeRange, + alert, + rule, +}: APMAlertDetailsProps) { + return ( + + + + + + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx index 535ba2e94e67c2..068d8395ea512e 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx @@ -8,7 +8,12 @@ import React from 'react'; import { v4 as uuidv4 } from 'uuid'; import { buildQueryFromFilters, Filter } from '@kbn/es-query'; import { ReactEmbeddableRenderer } from '@kbn/embeddable-plugin/public'; -import { GetSLOResponse, APMTransactionDurationIndicator } from '@kbn/slo-schema'; +import { + GetSLOResponse, + apmTransactionDurationIndicatorSchema, + APMTransactionDurationIndicator, + APMTransactionErrorRateIndicator, +} from '@kbn/slo-schema'; import type { BurnRateAlert, BurnRateRule, TimeRange } from '../../../types'; type EmbeddableId = @@ -18,18 +23,22 @@ type EmbeddableId = | 'APM_ALERTING_LATENCY_CHART_EMBEDDABLE' | 'APM_ALERTING_THROUGHPUT_CHART_EMBEDDABLE'; +export type APMTransactionDurationSLOResponse = GetSLOResponse & { + indicator: APMTransactionDurationIndicator; +}; + +export type APMErrorRateSLOResponse = GetSLOResponse & { + indicator: APMTransactionErrorRateIndicator; +}; + interface APMEmbeddableRootProps { - slo: APMTransactionDurationSLOResponse; + slo: APMTransactionDurationSLOResponse | APMErrorRateSLOResponse; dataTimeRange: TimeRange; embeddableId: EmbeddableId; alert: BurnRateAlert; rule: BurnRateRule; } -export type APMTransactionDurationSLOResponse = GetSLOResponse & { - indicator: APMTransactionDurationIndicator; -}; - export function APMEmbeddableRoot({ slo, dataTimeRange, @@ -40,6 +49,7 @@ export function APMEmbeddableRoot({ const filter = slo.indicator.params.filter; const isKueryFilter = typeof filter === 'string'; const groupingInput = getInputFromGroupings(slo); + const indicator = slo.indicator; const kuery = isKueryFilter ? filter : undefined; const allFilters = @@ -48,7 +58,7 @@ export function APMEmbeddableRoot({ : groupingInput.filters; const filters = buildQueryFromFilters(allFilters, undefined, undefined); const groupingsInput = getInputFromGroupings(slo); - const { transactionName, transactionType, environment, service } = slo.indicator.params; + const { transactionName, transactionType, environment, service } = indicator.params; const input = { id: uuidv4(), serviceName: service, @@ -57,7 +67,9 @@ export function APMEmbeddableRoot({ environment: environment !== '*' ? environment : undefined, rangeFrom: dataTimeRange.from.toISOString(), rangeTo: dataTimeRange.to.toISOString(), - latencyThresholdInMicroseconds: slo.indicator.params.threshold * 1000, + latencyThresholdInMicroseconds: apmTransactionDurationIndicatorSchema.is(indicator) + ? indicator.params.threshold * 1000 + : undefined, kuery, filters, alert, @@ -76,7 +88,9 @@ export function APMEmbeddableRoot({ ); } -const getInputFromGroupings = (slo: APMTransactionDurationSLOResponse) => { +const getInputFromGroupings = ( + slo: APMTransactionDurationSLOResponse | APMErrorRateSLOResponse +) => { const groupings = Object.entries(slo.groupings) as Array<[string, string]>; const input: { transactionName?: string; diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/custom_panels.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/custom_panels.tsx index 534c037ff3540b..e22cb7cd5a3fb0 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/custom_panels.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/custom_panels.tsx @@ -7,11 +7,14 @@ import React from 'react'; import type { GetSLOResponse } from '@kbn/slo-schema'; -import { APMAlertDetails } from './apm/apm_alert_details'; +import { APMLatencyAlertDetails, APMAvailabilityAlertDetails } from './apm/apm_alert_details'; import { CustomKqlPanels } from './custom_kql/custom_kql_panels'; import { getDataTimeRange } from '../../utils/time_range'; import type { BurnRateAlert, BurnRateRule } from '../../types'; -import type { APMTransactionDurationSLOResponse } from './apm/apm_alert_details'; +import type { + APMTransactionDurationSLOResponse, + APMErrorRateSLOResponse, +} from './apm/embeddable_root'; interface Props { alert: BurnRateAlert; @@ -26,13 +29,22 @@ export function CustomAlertDetailsPanel({ slo, alert, rule }: Props) { return ; case 'sli.apm.transactionDuration': return ( - ); + case 'sli.apm.transactionErrorRate': + return ( + + ); default: return null; } From 95ad2f7fdeb615d2e37c3c811a2bacdea594717f Mon Sep 17 00:00:00 2001 From: Dominique Clarke Date: Tue, 21 May 2024 16:06:01 -0400 Subject: [PATCH 75/97] [SLO] [APM] Alert details visualization - add View in APM buttons (#183415) ## Summary Relates to https://github.com/elastic/kibana/issues/178521 Adds the `View in APM` button to the APM alert details visualizations. These visualizations appear in the SLO's APM SLI's burn rate alert details page and the APM's latency threshold alert details page. ![image](https://github.com/elastic/kibana/assets/11356435/0aaef288-4c3c-473c-b1f9-9c21e80c9fda) ### Testing 1. Generate some APM data. The easiest way to do so is to via `synthtrace`, for example `node scripts/synthtrace continous_rollups.ts --live` 2. Navigate to the SLO page. Create an APM failed transaction rate SLI with * for environment, 3. Wait for an alert to fire 4. Navigate to the alert details page for the alert to view the charts. 5. Click the View in APM url to navigate to APM. It should navigate to the service overview page for the specified service with environment `ALL` and transaction type `request` selected. 6. Edit the original SLO to add a specific environment 7. Wait for an alert to fire then navigate back to the alert details page. Click on the View in APM buttons 8. The button should navigate tot he APM service overview page for the specified service, with the correct environment selected. 9. Edit the original SLO, this time select a specific transaction type. The `continous_rollups` synthtrace configuration contains a `custom` transaction type so consider using that. 10. Wait for an alert to fire then navigate back to the alert details page. Click on the View in APM buttons 11. The button should navigate tot he APM service overview page for the specified service, with the correct transaction type selected. 12. Edit the original SLO to add a specific transaction name 13. Wait for an alert to fire then navigate back to the alert details page. Click on the View in APM buttons. 14. The button should navigate tot he APM transaction overview page for the specified transaction. --- .../failed_transaction_chart.tsx | 16 +++++ .../latency_chart.tsx | 16 +++++ .../throughput_chart.tsx | 16 +++++ .../view_in_apm_button.tsx | 62 +++++++++++++++++++ .../apm/public/locator/helpers.ts | 5 +- 5 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.tsx diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx index 4b43107861352c..02273f0f43141d 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx @@ -35,6 +35,7 @@ import { yLabelFormat } from './helpers'; import { usePreferredDataSourceAndBucketSize } from '../../../../hooks/use_preferred_data_source_and_bucket_size'; import { ApmDocumentType } from '../../../../../common/document_type'; import { TransactionTypeSelect } from './transaction_type_select'; +import { ViewInAPMButton } from './view_in_apm_button'; type ErrorRate = APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate'>; @@ -196,6 +197,21 @@ function FailedTransactionChart({ /> )} + + + + + + + )} + + + + + + + )} + + + + + + + + serviceNavigator.navigate({ + serviceName, + serviceOverviewTab: transactionName ? 'transactions' : undefined, + query: { + environment, + rangeFrom: from, + rangeTo: to, + kuery, + transactionName, + transactionType, + }, + }) + } + iconType="sortRight" + color="text" + > + + + ); +} diff --git a/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts b/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts index 61ac0b75c50fbc..69c041a00374ce 100644 --- a/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts +++ b/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts @@ -33,7 +33,10 @@ export const APMLocatorPayloadValidator = t.union([ }), }), t.type({ - query: environmentRt, + query: t.intersection([ + environmentRt, + t.partial({ kuery: t.string, rangeFrom: t.string, rangeTo: t.string }), + ]), }), ]), ]); From 53435eace39f0894d9c1038b336a2d57e060fb58 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Tue, 21 May 2024 16:37:31 -0400 Subject: [PATCH 76/97] [Embeddables rebuild] Support for by reference embeddables (#182523) Adds first-class by reference support to the new Embeddable framework and adds an example of how a new-styled by reference embeddable could work. --- .../public/app/render_examples.tsx | 21 +- examples/embeddable_examples/public/plugin.ts | 14 +- .../saved_book/book_state.ts | 45 ++++ .../react_embeddables/saved_book/constants.ts | 10 + .../saved_book/create_saved_book_action.tsx | 71 ++++++ .../saved_book/saved_book_editor.tsx | 212 ++++++++++++++++++ .../saved_book/saved_book_library.ts | 29 +++ .../saved_book_react_embeddable.tsx | 211 +++++++++++++++++ .../react_embeddables/saved_book/types.ts | 50 +++++ .../search/search_embeddable_renderer.tsx | 4 +- examples/embeddable_examples/tsconfig.json | 4 +- .../presentation_containers/index.ts | 22 +- .../interfaces/child_state.ts | 29 +++ .../interfaces/has_save_notification.ts | 17 ++ .../interfaces/last_saved_state.ts | 56 ----- .../interfaces/serialized_state.ts | 17 +- .../presentation_containers/tsconfig.json | 1 + .../presentation_publishing/index.ts | 12 +- .../interfaces/has_library_transforms.ts | 86 +++++-- .../add_to_library_action.tsx | 39 +++- .../library_notification_action.tsx | 24 +- .../library_notification_popover.tsx | 5 +- .../unlink_from_library_action.tsx | 39 +++- .../top_nav/share/show_share_modal.test.tsx | 4 +- .../top_nav/share/show_share_modal.tsx | 19 +- .../component/grid/dashboard_grid_item.tsx | 8 +- .../embeddable/api/run_save_functions.tsx | 27 ++- .../create/create_dashboard.test.ts | 2 +- .../embeddable/create/create_dashboard.ts | 9 +- .../embeddable/dashboard_container.tsx | 40 +++- .../diffing/dashboard_diffing_integration.ts | 54 ++--- .../public/dashboard_container/types.ts | 4 + .../dashboard_backup_service.ts | 82 +++++-- .../public/services/dashboard_backup/types.ts | 14 +- src/plugins/embeddable/README.md | 27 ++- src/plugins/embeddable/public/index.ts | 2 - .../public/lib/containers/container.ts | 8 +- src/plugins/embeddable/public/plugin.tsx | 10 +- .../public/react_embeddable_system/index.ts | 7 +- .../react_embeddable_registry.ts | 16 +- .../react_embeddable_renderer.test.tsx | 78 +++++-- .../react_embeddable_renderer.tsx | 90 +++++--- ...est.tsx => react_embeddable_state.test.ts} | 117 ++++++---- .../react_embeddable_state.ts | 120 ++++++++++ .../react_embeddable_unsaved_changes.ts | 93 -------- .../public/react_embeddable_system/types.ts | 51 +++-- .../renderers/embeddable/embeddable.tsx | 8 +- .../components/hooks/use_canvas_api.tsx | 13 +- x-pack/plugins/canvas/types/embeddables.ts | 7 +- .../cases/anomaly_swim_lane_attachment.tsx | 10 +- ...omaly_swimlane_embeddable_factory.test.tsx | 8 +- .../shared_components/anomaly_swim_lane.tsx | 11 +- .../custom_panels/apm/embeddable_root.tsx | 2 +- 53 files changed, 1451 insertions(+), 508 deletions(-) create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/book_state.ts create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/constants.ts create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/create_saved_book_action.tsx create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_library.ts create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx create mode 100644 examples/embeddable_examples/public/react_embeddables/saved_book/types.ts create mode 100644 packages/presentation/presentation_containers/interfaces/child_state.ts create mode 100644 packages/presentation/presentation_containers/interfaces/has_save_notification.ts delete mode 100644 packages/presentation/presentation_containers/interfaces/last_saved_state.ts rename src/plugins/embeddable/public/react_embeddable_system/{react_embeddable_unsaved_changes.test.tsx => react_embeddable_state.test.ts} (54%) create mode 100644 src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.ts delete mode 100644 src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts diff --git a/examples/embeddable_examples/public/app/render_examples.tsx b/examples/embeddable_examples/public/app/render_examples.tsx index f956a71711c7cc..4998b3bc5a59c9 100644 --- a/examples/embeddable_examples/public/app/render_examples.tsx +++ b/examples/embeddable_examples/public/app/render_examples.tsx @@ -27,19 +27,14 @@ import { SEARCH_EMBEDDABLE_ID } from '../react_embeddables/search/constants'; import type { SearchApi, SearchSerializedState } from '../react_embeddables/search/types'; export const RenderExamples = () => { - const initialState = useMemo(() => { - return { - rawState: { - timeRange: undefined, - }, - references: [], - }; - // only run onMount - }, []); - const parentApi = useMemo(() => { return { reload$: new Subject(), + getSerializedStateForChild: () => ({ + rawState: { + timeRange: undefined, + }, + }), timeRange$: new BehaviorSubject({ from: 'now-24h', to: 'now', @@ -85,8 +80,7 @@ export const RenderExamples = () => { {` type={SEARCH_EMBEDDABLE_ID} - state={initialState} - parentApi={parentApi} + getParentApi={() => parentApi} onApiAvailable={(newApi) => { setApi(newApi); }} @@ -107,8 +101,7 @@ export const RenderExamples = () => { key={hidePanelChrome ? 'hideChrome' : 'showChrome'} type={SEARCH_EMBEDDABLE_ID} - state={initialState} - parentApi={parentApi} + getParentApi={() => parentApi} onApiAvailable={(newApi) => { setApi(newApi); }} diff --git a/examples/embeddable_examples/public/plugin.ts b/examples/embeddable_examples/public/plugin.ts index bcac6bf4d13677..f17bf97db11fdd 100644 --- a/examples/embeddable_examples/public/plugin.ts +++ b/examples/embeddable_examples/public/plugin.ts @@ -21,9 +21,11 @@ import { DATA_TABLE_ID } from './react_embeddables/data_table/constants'; import { registerCreateDataTableAction } from './react_embeddables/data_table/create_data_table_action'; import { EUI_MARKDOWN_ID } from './react_embeddables/eui_markdown/constants'; import { registerCreateEuiMarkdownAction } from './react_embeddables/eui_markdown/create_eui_markdown_action'; -import { registerCreateFieldListAction } from './react_embeddables/field_list/create_field_list_action'; import { FIELD_LIST_ID } from './react_embeddables/field_list/constants'; +import { registerCreateFieldListAction } from './react_embeddables/field_list/create_field_list_action'; import { registerFieldListPanelPlacementSetting } from './react_embeddables/field_list/register_field_list_embeddable'; +import { SAVED_BOOK_ID } from './react_embeddables/saved_book/constants'; +import { registerCreateSavedBookAction } from './react_embeddables/saved_book/create_saved_book_action'; import { registerAddSearchPanelAction } from './react_embeddables/search/register_add_search_panel_action'; import { registerSearchEmbeddable } from './react_embeddables/search/register_search_embeddable'; @@ -73,6 +75,14 @@ export class EmbeddableExamplesPlugin implements Plugin { + const { getSavedBookEmbeddableFactory } = await import( + './react_embeddables/saved_book/saved_book_react_embeddable' + ); + const [coreStart] = await startServicesPromise; + return getSavedBookEmbeddableFactory(coreStart); + }); + registerSearchEmbeddable( embeddable, new Promise((resolve) => startServicesPromise.then(([_, startDeps]) => resolve(startDeps))) @@ -88,6 +98,8 @@ export class EmbeddableExamplesPlugin implements Plugin { + const bookTitle = new BehaviorSubject(attributes.bookTitle); + const authorName = new BehaviorSubject(attributes.authorName); + const numberOfPages = new BehaviorSubject(attributes.numberOfPages); + const bookSynopsis = new BehaviorSubject(attributes.bookSynopsis); + + return { + bookTitle, + authorName, + numberOfPages, + bookSynopsis, + comparators: { + bookTitle: [bookTitle, (val) => bookTitle.next(val)], + authorName: [authorName, (val) => authorName.next(val)], + numberOfPages: [numberOfPages, (val) => numberOfPages.next(val)], + bookSynopsis: [bookSynopsis, (val) => bookSynopsis.next(val)], + }, + }; +}; + +export const serializeBookAttributes = (stateManager: BookAttributesManager): BookAttributes => ({ + bookTitle: stateManager.bookTitle.value, + authorName: stateManager.authorName.value, + numberOfPages: stateManager.numberOfPages.value, + bookSynopsis: stateManager.bookSynopsis.value, +}); diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/constants.ts b/examples/embeddable_examples/public/react_embeddables/saved_book/constants.ts new file mode 100644 index 00000000000000..4da3ebecf477e6 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/constants.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const SAVED_BOOK_ID = 'book'; +export const ADD_SAVED_BOOK_ACTION_ID = 'create_saved_book'; diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/create_saved_book_action.tsx b/examples/embeddable_examples/public/react_embeddables/saved_book/create_saved_book_action.tsx new file mode 100644 index 00000000000000..6916bd38cc28da --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/create_saved_book_action.tsx @@ -0,0 +1,71 @@ +/* + * 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 { CoreStart } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; +import { apiIsPresentationContainer } from '@kbn/presentation-containers'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import { UiActionsPublicStart } from '@kbn/ui-actions-plugin/public/plugin'; +import { embeddableExamplesGrouping } from '../embeddable_examples_grouping'; +import { + defaultBookAttributes, + serializeBookAttributes, + stateManagerFromAttributes, +} from './book_state'; +import { ADD_SAVED_BOOK_ACTION_ID, SAVED_BOOK_ID } from './constants'; +import { openSavedBookEditor } from './saved_book_editor'; +import { saveBookAttributes } from './saved_book_library'; +import { + BookByReferenceSerializedState, + BookByValueSerializedState, + BookSerializedState, +} from './types'; + +export const registerCreateSavedBookAction = (uiActions: UiActionsPublicStart, core: CoreStart) => { + uiActions.registerAction({ + id: ADD_SAVED_BOOK_ACTION_ID, + getIconType: () => 'folderClosed', + grouping: [embeddableExamplesGrouping], + isCompatible: async ({ embeddable }) => { + return apiIsPresentationContainer(embeddable); + }, + execute: async ({ embeddable }) => { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); + const newPanelStateManager = stateManagerFromAttributes(defaultBookAttributes); + + const { addToLibrary } = await openSavedBookEditor(newPanelStateManager, true, core, { + parentApi: embeddable, + }); + + const initialState: BookSerializedState = await (async () => { + // if we're adding this to the library, we only need to return the by reference state. + if (addToLibrary) { + const savedBookId = await saveBookAttributes( + undefined, + serializeBookAttributes(newPanelStateManager) + ); + return { savedBookId } as BookByReferenceSerializedState; + } + return { + attributes: serializeBookAttributes(newPanelStateManager), + } as BookByValueSerializedState; + })(); + + embeddable.addNewPanel({ + panelType: SAVED_BOOK_ID, + initialState, + }); + }, + getDisplayName: () => + i18n.translate('embeddableExamples.savedbook.addBookAction.displayName', { + defaultMessage: 'Book', + }), + }); + uiActions.attachAction('ADD_PANEL_TRIGGER', ADD_SAVED_BOOK_ACTION_ID); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx new file mode 100644 index 00000000000000..d658b8fac1e9e3 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx @@ -0,0 +1,212 @@ +/* + * 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 { + EuiButton, + EuiButtonEmpty, + EuiFieldNumber, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiFormControlLayout, + EuiFormRow, + EuiSwitch, + EuiTextArea, + EuiTitle, +} from '@elastic/eui'; +import { CoreStart } from '@kbn/core-lifecycle-browser'; +import { OverlayRef } from '@kbn/core-mount-utils-browser'; +import { i18n } from '@kbn/i18n'; +import { tracksOverlays } from '@kbn/presentation-containers'; +import { + apiHasParentApi, + apiHasUniqueId, + useBatchedOptionalPublishingSubjects, +} from '@kbn/presentation-publishing'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import React from 'react'; +import { serializeBookAttributes } from './book_state'; +import { BookAttributesManager } from './types'; + +export const openSavedBookEditor = ( + attributesManager: BookAttributesManager, + isCreate: boolean, + core: CoreStart, + api: unknown +): Promise<{ addToLibrary: boolean }> => { + return new Promise((resolve) => { + const closeOverlay = (overlayRef: OverlayRef) => { + if (apiHasParentApi(api) && tracksOverlays(api.parentApi)) { + api.parentApi.clearOverlays(); + } + overlayRef.close(); + }; + + const initialState = serializeBookAttributes(attributesManager); + const overlay = core.overlays.openFlyout( + toMountPoint( + { + // set the state back to the initial state and reject + attributesManager.authorName.next(initialState.authorName); + attributesManager.bookSynopsis.next(initialState.bookSynopsis); + attributesManager.bookTitle.next(initialState.bookTitle); + attributesManager.numberOfPages.next(initialState.numberOfPages); + closeOverlay(overlay); + }} + onSubmit={(addToLibrary: boolean) => { + closeOverlay(overlay); + resolve({ addToLibrary }); + }} + />, + { + theme: core.theme, + i18n: core.i18n, + } + ), + { + type: isCreate ? 'overlay' : 'push', + size: isCreate ? 'm' : 's', + onClose: () => closeOverlay(overlay), + } + ); + + const overlayOptions = !isCreate && apiHasUniqueId(api) ? { focusedPanelId: api.uuid } : {}; + /** + * if our parent needs to know about the overlay, notify it. This allows the parent to close the overlay + * when navigating away, or change certain behaviors based on the overlay being open. + */ + if (apiHasParentApi(api) && tracksOverlays(api.parentApi)) { + api.parentApi.openOverlay(overlay, overlayOptions); + } + }); +}; + +export const SavedBookEditor = ({ + attributesManager, + isCreate, + onSubmit, + onCancel, +}: { + attributesManager: BookAttributesManager; + isCreate: boolean; + onSubmit: (addToLibrary: boolean) => void; + onCancel: () => void; +}) => { + const [addToLibrary, setAddToLibrary] = React.useState(false); + const [authorName, synopsis, bookTitle, numberOfPages] = useBatchedOptionalPublishingSubjects( + attributesManager.authorName, + attributesManager.bookSynopsis, + attributesManager.bookTitle, + attributesManager.numberOfPages + ); + + return ( + <> + + +

+ {isCreate + ? i18n.translate('embeddableExamples.savedBook.editor.newTitle', { + defaultMessage: 'Create new book', + }) + : i18n.translate('embeddableExamples.savedBook.editor.editTitle', { + defaultMessage: 'Edit book', + })} +

+ + + + + + attributesManager.authorName.next(e.target.value)} + /> + + + attributesManager.bookTitle.next(e.target.value)} + /> + + + attributesManager.numberOfPages.next(+e.target.value)} + /> + + + attributesManager.bookSynopsis.next(e.target.value)} + /> + + + + + + + + {i18n.translate('embeddableExamples.savedBook.editor.cancel', { + defaultMessage: 'Discard changes', + })} + + + + + {isCreate && ( + + setAddToLibrary(!addToLibrary)} + /> + + )} + + onSubmit(addToLibrary)} fill> + {isCreate + ? i18n.translate('embeddableExamples.savedBook.editor.create', { + defaultMessage: 'Create book', + }) + : i18n.translate('embeddableExamples.savedBook.editor.save', { + defaultMessage: 'Keep changes', + })} + + + + + + + + ); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_library.ts b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_library.ts new file mode 100644 index 00000000000000..49b42ad2b96bf3 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_library.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { v4 } from 'uuid'; +import { BookAttributes } from './types'; + +const storage = new Storage(localStorage); + +export const loadBookAttributes = async (id: string): Promise => { + await new Promise((r) => setTimeout(r, 500)); // simulate load from network. + const attributes = storage.get(id) as BookAttributes; + return attributes; +}; + +export const saveBookAttributes = async ( + maybeId?: string, + attributes?: BookAttributes +): Promise => { + await new Promise((r) => setTimeout(r, 100)); // simulate save to network. + const id = maybeId ?? v4(); + storage.set(id, attributes); + return id; +}; diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx new file mode 100644 index 00000000000000..94e54b6ee350cc --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx @@ -0,0 +1,211 @@ +/* + * 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 { EuiBadge, EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiText, EuiTitle } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { CoreStart } from '@kbn/core-lifecycle-browser'; +import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { + initializeTitles, + SerializedTitles, + useBatchedPublishingSubjects, +} from '@kbn/presentation-publishing'; +import { euiThemeVars } from '@kbn/ui-theme'; +import React from 'react'; +import { BehaviorSubject } from 'rxjs'; +import { serializeBookAttributes, stateManagerFromAttributes } from './book_state'; +import { SAVED_BOOK_ID } from './constants'; +import { openSavedBookEditor } from './saved_book_editor'; +import { loadBookAttributes, saveBookAttributes } from './saved_book_library'; +import { + BookApi, + BookAttributes, + BookByReferenceSerializedState, + BookByValueSerializedState, + BookRuntimeState, + BookSerializedState, +} from './types'; + +const bookSerializedStateIsByReference = ( + state?: BookSerializedState +): state is BookByReferenceSerializedState => { + return Boolean(state && (state as BookByReferenceSerializedState).savedBookId !== undefined); +}; + +export const getSavedBookEmbeddableFactory = (core: CoreStart) => { + const savedBookEmbeddableFactory: ReactEmbeddableFactory< + BookSerializedState, + BookApi, + BookRuntimeState + > = { + type: SAVED_BOOK_ID, + deserializeState: async (serializedState) => { + // panel state is always stored with the parent. + const titlesState: SerializedTitles = { + title: serializedState.rawState.title, + hidePanelTitles: serializedState.rawState.hidePanelTitles, + description: serializedState.rawState.description, + }; + + const savedBookId = bookSerializedStateIsByReference(serializedState.rawState) + ? serializedState.rawState.savedBookId + : undefined; + + const attributes: BookAttributes = bookSerializedStateIsByReference(serializedState.rawState) + ? await loadBookAttributes(serializedState.rawState.savedBookId)! + : serializedState.rawState.attributes; + + // Combine the serialized state from the parent with the state from the + // external store to build runtime state. + return { + ...titlesState, + ...attributes, + savedBookId, + }; + }, + buildEmbeddable: async (state, buildApi) => { + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const bookAttributesManager = stateManagerFromAttributes(state); + const savedBookId$ = new BehaviorSubject(state.savedBookId); + + const api = buildApi( + { + ...titlesApi, + onEdit: async () => { + openSavedBookEditor(bookAttributesManager, false, core, api); + }, + isEditingEnabled: () => true, + getTypeDisplayName: () => + i18n.translate('embeddableExamples.savedbook.editBook.displayName', { + defaultMessage: 'book', + }), + serializeState: async () => { + if (savedBookId$.value === undefined) { + // if this book is currently by value, we serialize the entire state. + const bookByValueState: BookByValueSerializedState = { + attributes: serializeBookAttributes(bookAttributesManager), + ...serializeTitles(), + }; + return { rawState: bookByValueState }; + } + + // if this book is currently by reference, we serialize the reference and write to the external store. + const bookByReferenceState: BookByReferenceSerializedState = { + savedBookId: savedBookId$.value, + ...serializeTitles(), + }; + + await saveBookAttributes( + savedBookId$.value, + serializeBookAttributes(bookAttributesManager) + ); + return { rawState: bookByReferenceState }; + }, + + // in place library transforms + libraryId$: savedBookId$, + saveToLibrary: async (newTitle: string) => { + bookAttributesManager.bookTitle.next(newTitle); + const newId = await saveBookAttributes( + undefined, + serializeBookAttributes(bookAttributesManager) + ); + savedBookId$.next(newId); + return newId; + }, + checkForDuplicateTitle: async (title) => {}, + unlinkFromLibrary: () => { + savedBookId$.next(undefined); + }, + }, + { + savedBookId: [savedBookId$, (val) => savedBookId$.next(val)], + ...bookAttributesManager.comparators, + ...titleComparators, + } + ); + + return { + api, + Component: () => { + const [authorName, numberOfPages, savedBookId, bookTitle, synopsis] = + useBatchedPublishingSubjects( + bookAttributesManager.authorName, + bookAttributesManager.numberOfPages, + savedBookId$, + bookAttributesManager.bookTitle, + bookAttributesManager.bookSynopsis + ); + + return ( +
+ +
+ + + + {bookTitle} + + + + + + + {authorName} + + + + + {i18n.translate('embeddableExamples.savedBook.numberOfPages', { + defaultMessage: '{numberOfPages} pages', + values: { numberOfPages }, + })} + + + + + + {synopsis} + + +
+
+ ); + }, + }; + }, + }; + return savedBookEmbeddableFactory; +}; diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/types.ts b/examples/embeddable_examples/public/react_embeddables/saved_book/types.ts new file mode 100644 index 00000000000000..ec855bbd38f964 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/types.ts @@ -0,0 +1,50 @@ +/* + * 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 { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { + HasEditCapabilities, + HasInPlaceLibraryTransforms, + SerializedTitles, + StateComparators, +} from '@kbn/presentation-publishing'; +import { BehaviorSubject } from 'rxjs'; + +export interface BookAttributes { + bookTitle: string; + authorName: string; + numberOfPages: number; + bookSynopsis?: string; +} + +export type BookAttributesManager = { + [key in keyof Required]: BehaviorSubject; +} & { comparators: StateComparators }; + +export interface BookByValueSerializedState { + attributes: BookAttributes; +} + +export interface BookByReferenceSerializedState { + savedBookId: string; +} + +export type BookSerializedState = SerializedTitles & + (BookByValueSerializedState | BookByReferenceSerializedState); + +/** + * Book runtime state is a flattened version of all possible state keys. + */ +export interface BookRuntimeState + extends BookAttributes, + Partial, + SerializedTitles {} + +export type BookApi = DefaultEmbeddableApi & + HasEditCapabilities & + HasInPlaceLibraryTransforms; diff --git a/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx b/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx index cadaedbc29f6f7..65cb55fb3e43df 100644 --- a/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx +++ b/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx @@ -31,6 +31,7 @@ export function SearchEmbeddableRenderer(props: Props) { const parentApi = useMemo(() => { return { timeRange$: new BehaviorSubject(props.timeRange), + getSerializedStateForChild: () => initialState, }; // only run onMount // eslint-disable-next-line react-hooks/exhaustive-deps @@ -43,8 +44,7 @@ export function SearchEmbeddableRenderer(props: Props) { return ( type={SEARCH_EMBEDDABLE_ID} - state={initialState} - parentApi={parentApi} + getParentApi={() => parentApi} hidePanelChrome={true} /> ); diff --git a/examples/embeddable_examples/tsconfig.json b/examples/embeddable_examples/tsconfig.json index b356083a20546d..2df5e6534bd278 100644 --- a/examples/embeddable_examples/tsconfig.json +++ b/examples/embeddable_examples/tsconfig.json @@ -38,6 +38,8 @@ "@kbn/kibana-react-plugin", "@kbn/react-kibana-context-render", "@kbn/unified-data-table", - "@kbn/kibana-utils-plugin" + "@kbn/kibana-utils-plugin", + "@kbn/core-mount-utils-browser", + "@kbn/react-kibana-mount" ] } diff --git a/packages/presentation/presentation_containers/index.ts b/packages/presentation/presentation_containers/index.ts index f6049b284eae2f..89b327801d2894 100644 --- a/packages/presentation/presentation_containers/index.ts +++ b/packages/presentation/presentation_containers/index.ts @@ -8,10 +8,15 @@ export { apiCanAddNewPanel, type CanAddNewPanel } from './interfaces/can_add_new_panel'; export { - apiPublishesLastSavedState, - getLastSavedStateSubjectForChild, - type PublishesLastSavedState, -} from './interfaces/last_saved_state'; + apiHasRuntimeChildState, + apiHasSerializedChildState, + type HasRuntimeChildState, + type HasSerializedChildState, +} from './interfaces/child_state'; +export { + apiHasSaveNotification, + type HasSaveNotification, +} from './interfaces/has_save_notification'; export { apiCanDuplicatePanels, apiCanExpandPanels, @@ -25,13 +30,14 @@ export { type PanelPackage, type PresentationContainer, } from './interfaces/presentation_container'; -export { - canTrackContentfulRender, - type TrackContentfulRender, -} from './interfaces/track_contentful_render'; export { apiHasSerializableState, type HasSerializableState, + type HasSnapshottableState, type SerializedPanelState, } from './interfaces/serialized_state'; export { tracksOverlays, type TracksOverlays } from './interfaces/tracks_overlays'; +export { + canTrackContentfulRender, + type TrackContentfulRender, +} from './interfaces/track_contentful_render'; diff --git a/packages/presentation/presentation_containers/interfaces/child_state.ts b/packages/presentation/presentation_containers/interfaces/child_state.ts new file mode 100644 index 00000000000000..c197974c67add2 --- /dev/null +++ b/packages/presentation/presentation_containers/interfaces/child_state.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { SerializedPanelState } from './serialized_state'; + +export interface HasSerializedChildState { + getSerializedStateForChild: (childId: string) => SerializedPanelState; +} + +export interface HasRuntimeChildState { + getRuntimeStateForChild: (childId: string) => Partial | undefined; +} + +export const apiHasSerializedChildState = ( + api: unknown +): api is HasSerializedChildState => { + return Boolean(api && (api as HasSerializedChildState).getSerializedStateForChild); +}; + +export const apiHasRuntimeChildState = ( + api: unknown +): api is HasRuntimeChildState => { + return Boolean(api && (api as HasRuntimeChildState).getRuntimeStateForChild); +}; diff --git a/packages/presentation/presentation_containers/interfaces/has_save_notification.ts b/packages/presentation/presentation_containers/interfaces/has_save_notification.ts new file mode 100644 index 00000000000000..0607b83a12955d --- /dev/null +++ b/packages/presentation/presentation_containers/interfaces/has_save_notification.ts @@ -0,0 +1,17 @@ +/* + * 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 { Subject } from 'rxjs'; + +export interface HasSaveNotification { + saveNotification$: Subject; // a notification that state has been saved +} + +export const apiHasSaveNotification = (api: unknown): api is HasSaveNotification => { + return Boolean(api && (api as HasSaveNotification).saveNotification$); +}; diff --git a/packages/presentation/presentation_containers/interfaces/last_saved_state.ts b/packages/presentation/presentation_containers/interfaces/last_saved_state.ts deleted file mode 100644 index b4e4664920f11e..00000000000000 --- a/packages/presentation/presentation_containers/interfaces/last_saved_state.ts +++ /dev/null @@ -1,56 +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 { PublishingSubject } from '@kbn/presentation-publishing'; -import { BehaviorSubject, Subject } from 'rxjs'; -import { filter, map } from 'rxjs'; -import { SerializedPanelState } from './serialized_state'; - -export interface PublishesLastSavedState { - lastSavedState: Subject; // a notification that the last saved state has changed - getLastSavedStateForChild: ( - childId: string - ) => SerializedPanelState | undefined; -} - -export const apiPublishesLastSavedState = (api: unknown): api is PublishesLastSavedState => { - return Boolean( - api && - (api as PublishesLastSavedState).lastSavedState && - (api as PublishesLastSavedState).getLastSavedStateForChild - ); -}; - -export const getLastSavedStateSubjectForChild = < - SerializedState extends object = object, - RuntimeState extends object = object ->( - parentApi: unknown, - childId: string, - deserializer: (state: SerializedPanelState) => RuntimeState -): PublishingSubject | undefined => { - if (!parentApi) return; - const fetchLastSavedState = (): RuntimeState | undefined => { - if (!apiPublishesLastSavedState(parentApi)) return; - const rawLastSavedState = parentApi.getLastSavedStateForChild(childId); - if (rawLastSavedState === undefined) return; - return deserializer(rawLastSavedState); - }; - - const lastSavedStateForChild = new BehaviorSubject( - fetchLastSavedState() - ); - if (!apiPublishesLastSavedState(parentApi)) return; - parentApi.lastSavedState - .pipe( - map(() => fetchLastSavedState()), - filter((rawLastSavedState) => rawLastSavedState !== undefined) - ) - .subscribe(lastSavedStateForChild); - return lastSavedStateForChild; -}; diff --git a/packages/presentation/presentation_containers/interfaces/serialized_state.ts b/packages/presentation/presentation_containers/interfaces/serialized_state.ts index f56dd215bbcda8..9678e5a1faeca8 100644 --- a/packages/presentation/presentation_containers/interfaces/serialized_state.ts +++ b/packages/presentation/presentation_containers/interfaces/serialized_state.ts @@ -7,6 +7,7 @@ */ import { Reference } from '@kbn/content-management-utils'; +import { MaybePromise } from '@kbn/utility-types'; /** * A package containing the serialized Embeddable state, with references extracted. When saving Embeddables using any @@ -17,10 +18,22 @@ export interface SerializedPanelState { rawState: RawStateType; } -export interface HasSerializableState { - serializeState: () => SerializedPanelState; +export interface HasSerializableState { + /** + * Serializes all state into a format that can be saved into + * some external store. The opposite of `deserialize` in the {@link ReactEmbeddableFactory} + */ + serializeState: () => MaybePromise>; } export const apiHasSerializableState = (api: unknown | null): api is HasSerializableState => { return Boolean((api as HasSerializableState)?.serializeState); }; + +export interface HasSnapshottableState { + /** + * Serializes all runtime state exactly as it appears. This could be used + * to rehydrate a component's state without needing to deserialize it. + */ + snapshotRuntimeState: () => RuntimeState; +} diff --git a/packages/presentation/presentation_containers/tsconfig.json b/packages/presentation/presentation_containers/tsconfig.json index 8e25a7b80c6e24..15fe3978617009 100644 --- a/packages/presentation/presentation_containers/tsconfig.json +++ b/packages/presentation/presentation_containers/tsconfig.json @@ -10,5 +10,6 @@ "@kbn/presentation-publishing", "@kbn/core-mount-utils-browser", "@kbn/content-management-utils", + "@kbn/utility-types", ] } diff --git a/packages/presentation/presentation_publishing/index.ts b/packages/presentation/presentation_publishing/index.ts index c2669c19c32548..5159a0b7d3b522 100644 --- a/packages/presentation/presentation_publishing/index.ts +++ b/packages/presentation/presentation_publishing/index.ts @@ -29,11 +29,11 @@ export { useInheritedViewMode, type CanAccessViewMode, } from './interfaces/can_access_view_mode'; +export { fetch$, type FetchContext } from './interfaces/fetch/fetch'; export { initializeTimeRange, type SerializedTimeRange, } from './interfaces/fetch/initialize_time_range'; -export { fetch$, type FetchContext } from './interfaces/fetch/fetch'; export { apiPublishesPartialUnifiedSearch, apiPublishesTimeRange, @@ -50,9 +50,15 @@ export { } from './interfaces/has_app_context'; export { apiHasDisableTriggers, type HasDisableTriggers } from './interfaces/has_disable_triggers'; export { hasEditCapabilities, type HasEditCapabilities } from './interfaces/has_edit_capabilities'; +export { + apiHasExecutionContext, + type HasExecutionContext, +} from './interfaces/has_execution_context'; export { apiHasLegacyLibraryTransforms, apiHasLibraryTransforms, + apiHasInPlaceLibraryTransforms, + type HasInPlaceLibraryTransforms, type HasLegacyLibraryTransforms, type HasLibraryTransforms, } from './interfaces/has_library_transforms'; @@ -68,10 +74,6 @@ export { type HasTypeDisplayName, } from './interfaces/has_type'; export { apiHasUniqueId, type HasUniqueId } from './interfaces/has_uuid'; -export { - apiHasExecutionContext, - type HasExecutionContext, -} from './interfaces/has_execution_context'; export { apiPublishesBlockingError, type PublishesBlockingError, diff --git a/packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts b/packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts index b3715c1b35ae2e..17d48eca51be7f 100644 --- a/packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts +++ b/packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts @@ -6,47 +6,93 @@ * Side Public License, v 1. */ -export interface HasLibraryTransforms { - // - // Add to library methods - // +import { PublishingSubject } from '../publishing_subject'; + +interface DuplicateTitleCheck { + checkForDuplicateTitle: ( + newTitle: string, + isTitleDuplicateConfirmed: boolean, + onTitleDuplicate: () => void + ) => Promise; +} +interface LibraryTransformGuards { /** * * @returns {Promise} * True when embeddable is by-value and can be converted to by-reference */ canLinkToLibrary: () => Promise; + /** + * + * @returns {Promise} + * True when embeddable is by-reference and can be converted to by-value + */ + canUnlinkFromLibrary: () => Promise; +} + +/** + * APIs that inherit this interface can be linked to and unlinked from the library in place without + * re-initialization. + */ +export interface HasInPlaceLibraryTransforms + extends Partial, + DuplicateTitleCheck { + /** + * The id of the library item that this embeddable is linked to. + */ + libraryId$: PublishingSubject; + /** * Save embeddable to library * * @returns {Promise} id of persisted library item */ saveToLibrary: (title: string) => Promise; + /** - * - * @returns {StateT} - * by-reference embeddable state replacing by-value embeddable state + * Un-links this embeddable from the library. This method is optional, and only needed if the Embeddable + * is not meant to be re-initialized as part of the unlink operation. If the embeddable needs to be re-initialized + * after unlinking, the getByValueState method should be used instead. */ - getByReferenceState: (libraryId: string) => StateT; - checkForDuplicateTitle: ( - newTitle: string, - isTitleDuplicateConfirmed: boolean, - onTitleDuplicate: () => void - ) => Promise; + unlinkFromLibrary: () => void; +} + +export const apiHasInPlaceLibraryTransforms = ( + unknownApi: null | unknown +): unknownApi is HasInPlaceLibraryTransforms => { + return Boolean( + unknownApi && + Boolean((unknownApi as HasInPlaceLibraryTransforms)?.libraryId$) && + typeof (unknownApi as HasInPlaceLibraryTransforms).saveToLibrary === 'function' && + typeof (unknownApi as HasInPlaceLibraryTransforms).unlinkFromLibrary === 'function' + ); +}; - // - // Unlink from library methods - // +/** + * APIs that inherit this interface can be linked to and unlinked from the library. After the save or unlink + * operation, the embeddable will be reinitialized. + */ +export interface HasLibraryTransforms + extends LibraryTransformGuards, + DuplicateTitleCheck { /** + * Save embeddable to library * - * @returns {Promise} - * True when embeddable is by-reference and can be converted to by-value + * @returns {Promise} id of persisted library item */ - canUnlinkFromLibrary: () => Promise; + saveToLibrary: (title: string) => Promise; + /** + * + * @returns {StateT} + * by-reference embeddable state replacing by-value embeddable state. After + * the save operation, the embeddable will be reinitialized with the results of this method. + */ + getByReferenceState: (libraryId: string) => StateT; /** * * @returns {StateT} - * by-value embeddable state replacing by-reference embeddable state + * by-value embeddable state replacing by-reference embeddable state. After + * the unlink operation, the embeddable will be reinitialized with the results of this method. */ getByValueState: () => StateT; } diff --git a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx index 90a0667a87c5a9..8f8178aa1e11c3 100644 --- a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx @@ -23,6 +23,8 @@ import { HasParentApi, apiHasUniqueId, apiHasParentApi, + HasInPlaceLibraryTransforms, + apiHasInPlaceLibraryTransforms, } from '@kbn/presentation-publishing'; import { OnSaveProps, @@ -40,14 +42,14 @@ export const ACTION_ADD_TO_LIBRARY = 'saveToLibrary'; export type AddPanelToLibraryActionApi = CanAccessViewMode & HasType & HasUniqueId & - HasLibraryTransforms & + (HasLibraryTransforms | HasInPlaceLibraryTransforms) & HasParentApi> & Partial; const isApiCompatible = (api: unknown | null): api is AddPanelToLibraryActionApi => Boolean( apiCanAccessViewMode(api) && - apiHasLibraryTransforms(api) && + (apiHasLibraryTransforms(api) || apiHasInPlaceLibraryTransforms(api)) && apiHasType(api) && apiHasUniqueId(api) && apiHasParentApi(api) && @@ -79,7 +81,7 @@ export class AddToLibraryAction implements Action { public async isCompatible({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) return false; - return getInheritedViewMode(embeddable) === 'edit' && (await embeddable.canLinkToLibrary()); + return getInheritedViewMode(embeddable) === 'edit' && (await this.canLinkToLibrary(embeddable)); } public async execute({ embeddable }: EmbeddableApiContext) { @@ -87,7 +89,7 @@ export class AddToLibraryAction implements Action { const title = getPanelTitle(embeddable); try { - const byRefState = await new Promise((resolve, reject) => { + const byRefState = await new Promise((resolve, reject) => { const onSave = async (props: OnSaveProps): Promise => { await embeddable.checkForDuplicateTitle( props.newTitle, @@ -96,7 +98,10 @@ export class AddToLibraryAction implements Action { ); try { const libraryId = await embeddable.saveToLibrary(props.newTitle); - resolve({ ...embeddable.getByReferenceState(libraryId), title: props.newTitle }); + if (apiHasLibraryTransforms(embeddable)) { + resolve({ ...embeddable.getByReferenceState(libraryId), title: props.newTitle }); + } + resolve(undefined); return { id: libraryId }; } catch (error) { reject(error); @@ -118,10 +123,16 @@ export class AddToLibraryAction implements Action { /> ); }); - await embeddable.parentApi.replacePanel(embeddable.uuid, { - panelType: embeddable.type, - initialState: byRefState, - }); + /** + * If byRefState is defined, this embeddable type must be re-initialized with the + * newly provided state. + */ + if (byRefState) { + await embeddable.parentApi.replacePanel(embeddable.uuid, { + panelType: embeddable.type, + initialState: byRefState, + }); + } this.toastsService.addSuccess({ title: dashboardAddToLibraryActionStrings.getSuccessMessage(title ? `'${title}'` : ''), 'data-test-subj': 'addPanelToLibrarySuccess', @@ -133,4 +144,14 @@ export class AddToLibraryAction implements Action { }); } } + + private async canLinkToLibrary(api: AddPanelToLibraryActionApi) { + if (apiHasLibraryTransforms(api)) { + return api.canLinkToLibrary?.(); + } else if (apiHasInPlaceLibraryTransforms(api)) { + const canLink = api.canLinkToLibrary ? await api.canLinkToLibrary() : true; + return api.libraryId$.value === undefined && canLink; + } + throw new IncompatibleActionError(); + } } diff --git a/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx b/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx index 86adbab9c20307..ca4b20ae714334 100644 --- a/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx @@ -9,14 +9,16 @@ import React from 'react'; import { + apiHasInPlaceLibraryTransforms, EmbeddableApiContext, getInheritedViewMode, getViewModeSubject, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import { BehaviorSubject, combineLatest } from 'rxjs'; import { LibraryNotificationPopover } from './library_notification_popover'; -import { dashboardLibraryNotificationStrings } from './_dashboard_actions_strings'; import { isApiCompatible, UnlinkFromLibraryAction } from './unlink_from_library_action'; +import { dashboardLibraryNotificationStrings } from './_dashboard_actions_strings'; export const ACTION_LIBRARY_NOTIFICATION = 'ACTION_LIBRARY_NOTIFICATION'; @@ -37,22 +39,27 @@ export class LibraryNotificationAction implements Action { return isApiCompatible(embeddable); } - public subscribeToCompatibilityChanges( + public subscribeToCompatibilityChanges = ( { embeddable }: EmbeddableApiContext, onChange: (isCompatible: boolean, action: LibraryNotificationAction) => void - ) { + ) => { if (!isApiCompatible(embeddable)) return; + const libraryIdSubject = apiHasInPlaceLibraryTransforms(embeddable) + ? embeddable.libraryId$ + : new BehaviorSubject(undefined); + const viewModeSubject = getViewModeSubject(embeddable); + if (!viewModeSubject) throw new IncompatibleActionError(); /** * TODO: Upgrade this action by subscribing to changes in the existance of a saved object id. Currently, * this is unnecessary because a link or unlink operation will cause the panel to unmount and remount. */ - return getViewModeSubject(embeddable)?.subscribe((viewMode) => { - embeddable.canUnlinkFromLibrary().then((canUnlink) => { + return combineLatest([libraryIdSubject, viewModeSubject]).subscribe(([libraryId, viewMode]) => { + this.unlinkAction.canUnlinkFromLibrary(embeddable).then((canUnlink) => { onChange(viewMode === 'edit' && canUnlink, this); }); }); - } + }; public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); @@ -66,7 +73,10 @@ export class LibraryNotificationAction implements Action { public isCompatible = async ({ embeddable }: EmbeddableApiContext) => { if (!isApiCompatible(embeddable)) return false; - return getInheritedViewMode(embeddable) === 'edit' && embeddable.canUnlinkFromLibrary(); + return ( + getInheritedViewMode(embeddable) === 'edit' && + this.unlinkAction.canUnlinkFromLibrary(embeddable) + ); }; public execute = async () => {}; diff --git a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx b/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx index bbb480d990f1d7..6a11450d1b2136 100644 --- a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx @@ -70,7 +70,10 @@ export function LibraryNotificationPopover({ unlinkAction, api }: LibraryNotific data-test-subj={'libraryNotificationUnlinkButton'} size="s" fill - onClick={() => unlinkAction.execute({ embeddable: api })} + onClick={() => { + setIsPopoverOpen(false); + unlinkAction.execute({ embeddable: api }); + }} > {unlinkAction.getDisplayName({ embeddable: api })} diff --git a/src/plugins/dashboard/public/dashboard_actions/unlink_from_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/unlink_from_library_action.tsx index cccfa64028ad21..17612fa9c6ef75 100644 --- a/src/plugins/dashboard/public/dashboard_actions/unlink_from_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/unlink_from_library_action.tsx @@ -23,6 +23,8 @@ import { apiHasUniqueId, HasType, apiHasType, + HasInPlaceLibraryTransforms, + apiHasInPlaceLibraryTransforms, } from '@kbn/presentation-publishing'; import { PresentationContainer } from '@kbn/presentation-containers'; import { pluginServices } from '../services/plugin_services'; @@ -31,7 +33,7 @@ import { dashboardUnlinkFromLibraryActionStrings } from './_dashboard_actions_st export const ACTION_UNLINK_FROM_LIBRARY = 'unlinkFromLibrary'; export type UnlinkPanelFromLibraryActionApi = CanAccessViewMode & - HasLibraryTransforms & + (HasLibraryTransforms | HasInPlaceLibraryTransforms) & HasType & HasUniqueId & HasParentApi> & @@ -40,7 +42,7 @@ export type UnlinkPanelFromLibraryActionApi = CanAccessViewMode & export const isApiCompatible = (api: unknown | null): api is UnlinkPanelFromLibraryActionApi => Boolean( apiCanAccessViewMode(api) && - apiHasLibraryTransforms(api) && + (apiHasLibraryTransforms(api) || apiHasInPlaceLibraryTransforms(api)) && apiHasUniqueId(api) && apiHasType(api) && apiHasParentApi(api) && @@ -70,19 +72,40 @@ export class UnlinkFromLibraryAction implements Action { return 'folderExclamation'; } + public async canUnlinkFromLibrary(api: UnlinkPanelFromLibraryActionApi) { + if (apiHasLibraryTransforms(api)) { + return api.canUnlinkFromLibrary(); + } else if (apiHasInPlaceLibraryTransforms(api)) { + const canUnLink = api.canUnlinkFromLibrary ? await api.canUnlinkFromLibrary() : true; + return canUnLink && api.libraryId$.value !== undefined; + } + throw new IncompatibleActionError(); + } + public async isCompatible({ embeddable }: EmbeddableApiContext) { - if (!isApiCompatible(embeddable)) return false; - return getInheritedViewMode(embeddable) === 'edit' && (await embeddable.canUnlinkFromLibrary()); + if (!isApiCompatible(embeddable)) { + // either a an `unlinkFromLibrary` method or a `getByValueState` method is required + return false; + } + return ( + getInheritedViewMode(embeddable) === 'edit' && (await this.canUnlinkFromLibrary(embeddable)) + ); } public async execute({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); const title = getPanelTitle(embeddable); try { - await embeddable.parentApi.replacePanel(embeddable.uuid, { - panelType: embeddable.type, - initialState: { ...embeddable.getByValueState(), title }, - }); + if (apiHasLibraryTransforms(embeddable)) { + await embeddable.parentApi.replacePanel(embeddable.uuid, { + panelType: embeddable.type, + initialState: { ...embeddable.getByValueState(), title }, + }); + } else if (apiHasInPlaceLibraryTransforms(embeddable)) { + embeddable.unlinkFromLibrary(); + } else { + throw new IncompatibleActionError(); + } this.toastsService.addSuccess({ title: dashboardUnlinkFromLibraryActionStrings.getSuccessMessage(title ? `'${title}'` : ''), 'data-test-subj': 'unlinkPanelSuccess', diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx index da4cb0b637398f..9cdab72403e5b1 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx @@ -70,7 +70,9 @@ describe('ShowShareModal', () => { const getPropsAndShare = ( unsavedState?: Partial ): ShowShareModalProps => { - pluginServices.getServices().dashboardBackup.getState = jest.fn().mockReturnValue(unsavedState); + pluginServices.getServices().dashboardBackup.getState = jest + .fn() + .mockReturnValue({ dashboardState: unsavedState }); return { isDirty: true, anchorElement: document.createElement('div'), diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx index e654a8aad29e5a..b60c3893466382 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx @@ -23,7 +23,7 @@ import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; import { dashboardUrlParams } from '../../dashboard_router'; import { shareModalStrings } from '../../_dashboard_app_strings'; import { pluginServices } from '../../../services/plugin_services'; -import { convertPanelMapToSavedPanels } from '../../../../common'; +import { convertPanelMapToSavedPanels, DashboardPanelMap } from '../../../../common'; import { DashboardLocatorParams } from '../../../dashboard_container'; const showFilterBarId = 'showFilterBar'; @@ -123,18 +123,23 @@ export function ShowShareModal({ }; let unsavedStateForLocator: DashboardLocatorParams = {}; - const unsavedDashboardState = dashboardBackup.getState(savedObjectId); + const { dashboardState: unsavedDashboardState, panels } = + dashboardBackup.getState(savedObjectId) ?? {}; + + const allPanels: DashboardPanelMap = { + ...(unsavedDashboardState?.panels ?? {}), + ...((panels as DashboardPanelMap) ?? {}), + }; if (unsavedDashboardState) { unsavedStateForLocator = { query: unsavedDashboardState.query, filters: unsavedDashboardState.filters, controlGroupInput: unsavedDashboardState.controlGroupInput as SerializableControlGroupInput, - panels: unsavedDashboardState.panels - ? (convertPanelMapToSavedPanels( - unsavedDashboardState.panels - ) as DashboardLocatorParams['panels']) - : undefined, + panels: + allPanels && Object.keys(allPanels).length > 0 + ? (convertPanelMapToSavedPanels(allPanels) as DashboardLocatorParams['panels']) + : undefined, // options useMargins: unsavedDashboardState?.useMargins, diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx index 7ec73f6dbe97ca..b0413b9fa3c464 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx @@ -13,7 +13,6 @@ import { PhaseEvent } from '@kbn/presentation-publishing'; import classNames from 'classnames'; import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import { DashboardPanelState } from '../../../../common'; -import { getReferencesForPanelId } from '../../../../common/dashboard_container/persistable_state/dashboard_container_references'; import { pluginServices } from '../../../services/plugin_services'; import { useDashboardContainer } from '../../embeddable/dashboard_container'; @@ -52,7 +51,6 @@ export const Item = React.forwardRef( const scrollToPanelId = container.select((state) => state.componentState.scrollToPanelId); const highlightPanelId = container.select((state) => state.componentState.highlightPanelId); const useMargins = container.select((state) => state.explicitInput.useMargins); - const panel = container.select((state) => state.explicitInput.panels[id]); const expandPanel = expandedPanelId !== undefined && expandedPanelId === id; const hidePanel = expandedPanelId !== undefined && expandedPanelId !== id; @@ -99,7 +97,6 @@ export const Item = React.forwardRef( const { embeddable: { reactEmbeddableRegistryHasKey }, } = pluginServices.getServices(); - const references = getReferencesForPanelId(id, container.savedObjectReferences); const panelProps = { showBadges: true, @@ -114,11 +111,10 @@ export const Item = React.forwardRef( container} key={`${type}_${id}`} panelProps={panelProps} onApiAvailable={(api) => container.registerChildApi(api)} - state={{ rawState: panel.explicitInput as object, references }} /> ); } @@ -132,7 +128,7 @@ export const Item = React.forwardRef( {...panelProps} /> ); - }, [id, container, useMargins, type, index, onPanelStatusChange, panel.explicitInput]); + }, [id, container, type, index, useMargins, onPanelStatusChange]); return (
}> + > = []; for (const [uuid, panel] of Object.entries(panels)) { if (!reactEmbeddableRegistryHasKey(panel.type)) continue; const api = dashboard.children$.value[uuid]; + if (api && apiHasSerializableState(api)) { - const serializedState = api.serializeState(); - panels[uuid].explicitInput = { ...serializedState.rawState, id: uuid }; - references.push(...prefixReferencesFromPanel(uuid, serializedState.references ?? [])); + serializePromises.push( + (async () => { + const serialized = await api.serializeState(); + return { uuid, serialized }; + })() + ); } } + + const serializeResults = await Promise.all(serializePromises); + for (const result of serializeResults) { + panels[result.uuid].explicitInput = { ...result.serialized.rawState, id: result.uuid }; + references.push(...prefixReferencesFromPanel(result.uuid, result.serialized.references ?? [])); + } + return { panels, references }; }; @@ -145,7 +160,7 @@ export function runSaveAs(this: DashboardContainer) { }); } this.savedObjectReferences = saveResult.references ?? []; - this.lastSavedState.next(); + this.saveNotification$.next(); resolve(saveResult); return saveResult; }; @@ -199,7 +214,7 @@ export async function runQuickSave(this: DashboardContainer) { this.savedObjectReferences = saveResult.references ?? []; this.dispatch.setLastSavedInput(dashboardStateToSave); - this.lastSavedState.next(); + this.saveNotification$.next(); if (this.controlGroup && persistableControlGroupInput) { this.controlGroup.setSavedState(persistableControlGroupInput); } diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts index 12eebe31da173d..bfe29801b07fb2 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts @@ -168,7 +168,7 @@ test('pulls state from backup which overrides state from saved object', async () }); pluginServices.getServices().dashboardBackup.getState = jest .fn() - .mockReturnValue({ description: 'wow this description marginally better' }); + .mockReturnValue({ dashboardState: { description: 'wow this description marginally better' } }); const dashboard = await createDashboard({ useSessionStorageIntegration: true }, 0, 'wow-such-id'); expect(dashboard).toBeDefined(); expect(dashboard!.getState().explicitInput.description).toBe( diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts index ac585ce58d8cc4..cd0d5e6fa23df3 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts @@ -195,11 +195,18 @@ export const initializeDashboard = async ({ // -------------------------------------------------------------------------------------- // Gather input from session storage and local storage if integration is used. // -------------------------------------------------------------------------------------- + const dashboardBackupState = dashboardBackup.getState(loadDashboardReturn.dashboardId); const sessionStorageInput = ((): Partial | undefined => { if (!useSessionStorageIntegration) return; - return dashboardBackup.getState(loadDashboardReturn.dashboardId); + return dashboardBackupState?.dashboardState; })(); + if (useSessionStorageIntegration) { + untilDashboardReady().then((dashboardContainer) => { + dashboardContainer.restoredRuntimeState = dashboardBackupState?.panels; + }); + } + // -------------------------------------------------------------------------------------- // Combine input from saved object, session storage, & passed input to create initial input. // -------------------------------------------------------------------------------------- diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx index 9a33543b7c3b1a..a0a10469483c79 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx @@ -34,7 +34,12 @@ import { } from '@kbn/embeddable-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import { TrackContentfulRender } from '@kbn/presentation-containers'; +import { + HasRuntimeChildState, + HasSaveNotification, + HasSerializedChildState, + TrackContentfulRender, +} from '@kbn/presentation-containers'; import { apiHasSerializableState, PanelPackage } from '@kbn/presentation-containers'; import { ReduxEmbeddableTools, ReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; import { LocatorPublic } from '@kbn/share-plugin/common'; @@ -72,6 +77,7 @@ import { DashboardPublicState, DashboardReduxState, DashboardRenderPerformanceStats, + UnsavedPanelState, } from '../types'; import { addFromLibrary, @@ -123,7 +129,12 @@ export const useDashboardContainer = (): DashboardContainer => { export class DashboardContainer extends Container - implements DashboardExternallyAccessibleApi, TrackContentfulRender + implements + DashboardExternallyAccessibleApi, + TrackContentfulRender, + HasSaveNotification, + HasRuntimeChildState, + HasSerializedChildState { public readonly type = DASHBOARD_CONTAINER_TYPE; @@ -575,7 +586,9 @@ export class DashboardContainer if (reactEmbeddableRegistryHasKey(panel.type)) { const child = this.children$.value[panelId]; if (!child) throw new PanelNotFoundError(); - const serialized = apiHasSerializableState(child) ? child.serializeState() : { rawState: {} }; + const serialized = apiHasSerializableState(child) + ? await child.serializeState() + : { rawState: {} }; return { type: panel.type, explicitInput: { ...panel.explicitInput, ...serialized.rawState }, @@ -806,17 +819,19 @@ export class DashboardContainer }); }; - public lastSavedState: Subject = new Subject(); - public getLastSavedStateForChild = (childId: string) => { - const { - componentState: { - lastSavedInput: { panels }, - }, - } = this.getState(); - const panel: DashboardPanelState | undefined = panels[childId]; + public saveNotification$: Subject = new Subject(); + public getSerializedStateForChild = (childId: string) => { const references = getReferencesForPanelId(childId, this.savedObjectReferences); - return { rawState: panel?.explicitInput, version: panel?.version, references }; + return { + rawState: this.getInput().panels[childId].explicitInput, + references, + }; + }; + + public restoredRuntimeState: UnsavedPanelState | undefined = undefined; + public getRuntimeStateForChild = (childId: string) => { + return this.restoredRuntimeState?.[childId]; }; public removePanel(id: string) { @@ -857,6 +872,7 @@ export class DashboardContainer }; public resetAllReactEmbeddables = () => { + this.restoredRuntimeState = undefined; let resetChangedPanelCount = false; const currentChildren = this.children$.value; for (const panelId of Object.keys(currentChildren)) { diff --git a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts index a8644239de90ef..dc3c4996e860f6 100644 --- a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts +++ b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts @@ -8,7 +8,7 @@ import { PersistableControlGroupInput } from '@kbn/controls-plugin/common'; import { apiPublishesUnsavedChanges, PublishesUnsavedChanges } from '@kbn/presentation-publishing'; import deepEqual from 'fast-deep-equal'; -import { cloneDeep, omit } from 'lodash'; +import { omit } from 'lodash'; import { AnyAction, Middleware } from 'redux'; import { combineLatest, debounceTime, Observable, of, startWith, switchMap } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs'; @@ -16,6 +16,7 @@ import { DashboardContainer, DashboardCreationOptions } from '../..'; import { DashboardContainerInput } from '../../../../common'; import { CHANGE_CHECK_DEBOUNCE } from '../../../dashboard_constants'; import { pluginServices } from '../../../services/plugin_services'; +import { UnsavedPanelState } from '../../types'; import { dashboardContainerReducers } from '../dashboard_container_reducers'; import { isKeyEqualAsync, unsavedChangesDiffingFunctions } from './dashboard_diffing_functions'; @@ -151,13 +152,17 @@ export function startDiffingDashboardState( this.dispatch.setHasUnsavedChanges(hasUnsavedChanges); } + const unsavedPanelState = reactEmbeddableChanges.reduce( + (acc, { childId, unsavedChanges }) => { + acc[childId] = unsavedChanges; + return acc; + }, + {} as UnsavedPanelState + ); + // backup unsaved changes if configured to do so if (creationOptions?.useSessionStorageIntegration) { - backupUnsavedChanges.bind(this)( - dashboardChanges, - reactEmbeddableChanges, - controlGroupChanges - ); + backupUnsavedChanges.bind(this)(dashboardChanges, unsavedPanelState, controlGroupChanges); } }) ); @@ -209,36 +214,19 @@ export async function getDashboardUnsavedChanges( function backupUnsavedChanges( this: DashboardContainer, dashboardChanges: Partial, - reactEmbeddableChanges: Array<{ - childId: string; - unsavedChanges: object | undefined; - }>, + reactEmbeddableChanges: UnsavedPanelState, controlGroupChanges: PersistableControlGroupInput | undefined ) { const { dashboardBackup } = pluginServices.getServices(); - - // apply all unsaved state from react embeddables to the unsaved changes object. - let hasAnyReactEmbeddableUnsavedChanges = false; - const currentPanels = cloneDeep(dashboardChanges.panels ?? this.getInput().panels); - for (const { childId, unsavedChanges: childUnsavedChanges } of reactEmbeddableChanges) { - if (!childUnsavedChanges) continue; - const panelStateToBackup = { - ...currentPanels[childId], - ...(dashboardChanges.panels?.[childId] ?? {}), - explicitInput: { - ...currentPanels[childId]?.explicitInput, - ...(dashboardChanges.panels?.[childId]?.explicitInput ?? {}), - ...childUnsavedChanges, - }, - }; - hasAnyReactEmbeddableUnsavedChanges = true; - currentPanels[childId] = panelStateToBackup; - } const dashboardStateToBackup = omit(dashboardChanges, keysToOmitFromSessionStorage); - dashboardBackup.setState(this.getDashboardSavedObjectId(), { - ...dashboardStateToBackup, - panels: hasAnyReactEmbeddableUnsavedChanges ? currentPanels : dashboardChanges.panels, - controlGroupInput: controlGroupChanges, - }); + dashboardBackup.setState( + this.getDashboardSavedObjectId(), + { + ...dashboardStateToBackup, + panels: dashboardChanges.panels, + controlGroupInput: controlGroupChanges, + }, + reactEmbeddableChanges + ); } diff --git a/src/plugins/dashboard/public/dashboard_container/types.ts b/src/plugins/dashboard/public/dashboard_container/types.ts index 26f37d7f7d9934..f3287494c7b66e 100644 --- a/src/plugins/dashboard/public/dashboard_container/types.ts +++ b/src/plugins/dashboard/public/dashboard_container/types.ts @@ -14,6 +14,10 @@ import { SerializableRecord } from '@kbn/utility-types'; import type { DashboardContainerInput, DashboardOptions } from '../../common'; import { SavedDashboardPanel } from '../../common/content_management'; +export interface UnsavedPanelState { + [key: string]: object | undefined; +} + export type DashboardReduxState = ReduxEmbeddableState< DashboardContainerInput, DashboardContainerOutput, diff --git a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts b/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts index fb5b2c12f05ee4..5a121ef4304002 100644 --- a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts +++ b/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts @@ -20,11 +20,15 @@ import type { DashboardBackupServiceType } from './types'; import type { DashboardContainerInput } from '../../../common'; import { DashboardNotificationsService } from '../notifications/types'; import { backupServiceStrings } from '../../dashboard_container/_dashboard_container_strings'; +import { UnsavedPanelState } from '../../dashboard_container/types'; export const DASHBOARD_PANELS_UNSAVED_ID = 'unsavedDashboard'; -const DASHBOARD_PANELS_SESSION_KEY = 'dashboardStateManagerPanels'; +const DASHBOARD_PANELS_SESSION_KEY = 'dashboardPanels'; const DASHBOARD_VIEWMODE_LOCAL_KEY = 'dashboardViewMode'; +// this key is named `panels` for BWC reasons, but actually contains the entire dashboard state +const DASHBOARD_STATE_SESSION_KEY = 'dashboardStateManagerPanels'; + interface DashboardBackupRequiredServices { notifications: DashboardNotificationsService; spaces: DashboardSpacesService; @@ -75,11 +79,22 @@ class DashboardBackupService implements DashboardBackupServiceType { public clearState(id = DASHBOARD_PANELS_UNSAVED_ID) { try { - const sessionStorage = this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY); - const sessionStorageForSpace = sessionStorage?.[this.activeSpaceId] || {}; - if (sessionStorageForSpace[id]) { - delete sessionStorageForSpace[id]; - this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, sessionStorage); + const dashboardStateStorage = + this.sessionStorage.get(DASHBOARD_STATE_SESSION_KEY)?.[this.activeSpaceId] ?? {}; + if (dashboardStateStorage[id]) { + delete dashboardStateStorage[id]; + this.sessionStorage.set(DASHBOARD_STATE_SESSION_KEY, { + [this.activeSpaceId]: dashboardStateStorage, + }); + } + + const panelsStorage = + this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY)?.[this.activeSpaceId] ?? {}; + if (panelsStorage[id]) { + delete panelsStorage[id]; + this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, { + [this.activeSpaceId]: panelsStorage, + }); } } catch (e) { this.notifications.toasts.addDanger({ @@ -89,9 +104,15 @@ class DashboardBackupService implements DashboardBackupServiceType { } } - public getState(id = DASHBOARD_PANELS_UNSAVED_ID): Partial | undefined { + public getState(id = DASHBOARD_PANELS_UNSAVED_ID) { try { - return this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY)?.[this.activeSpaceId]?.[id]; + const dashboardState = this.sessionStorage.get(DASHBOARD_STATE_SESSION_KEY)?.[ + this.activeSpaceId + ]?.[id] as Partial | undefined; + const panels = this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY)?.[this.activeSpaceId]?.[ + id + ] as UnsavedPanelState | undefined; + return { dashboardState, panels }; } catch (e) { this.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsGetError(e.message), @@ -100,11 +121,19 @@ class DashboardBackupService implements DashboardBackupServiceType { } } - public setState(id = DASHBOARD_PANELS_UNSAVED_ID, newState: Partial) { + public setState( + id = DASHBOARD_PANELS_UNSAVED_ID, + newState: Partial, + unsavedPanels: UnsavedPanelState + ) { try { - const sessionStateStorage = this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY) || {}; - set(sessionStateStorage, [this.activeSpaceId, id], newState); - this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, sessionStateStorage); + const dashboardStateStorage = this.sessionStorage.get(DASHBOARD_STATE_SESSION_KEY) ?? {}; + set(dashboardStateStorage, [this.activeSpaceId, id], newState); + this.sessionStorage.set(DASHBOARD_STATE_SESSION_KEY, dashboardStateStorage); + + const panelsStorage = this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY) ?? {}; + set(panelsStorage, [this.activeSpaceId, id], unsavedPanels); + this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, panelsStorage); } catch (e) { this.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsSetError(e.message), @@ -116,18 +145,25 @@ class DashboardBackupService implements DashboardBackupServiceType { public getDashboardIdsWithUnsavedChanges() { try { const dashboardStatesInSpace = - this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY)?.[this.activeSpaceId] || {}; - const dashboardsWithUnsavedChanges: string[] = []; - - Object.keys(dashboardStatesInSpace).map((dashboardId) => { - if ( - dashboardStatesInSpace[dashboardId].viewMode === ViewMode.EDIT && - Object.keys(dashboardStatesInSpace[dashboardId]).some( - (stateKey) => stateKey !== 'viewMode' + this.sessionStorage.get(DASHBOARD_STATE_SESSION_KEY)?.[this.activeSpaceId] ?? {}; + const panelStatesInSpace = + this.sessionStorage.get(DASHBOARD_PANELS_SESSION_KEY)?.[this.activeSpaceId] ?? {}; + + const dashboardsSet: Set = new Set(); + + [...Object.keys(panelStatesInSpace), ...Object.keys(dashboardStatesInSpace)].map( + (dashboardId) => { + if ( + dashboardStatesInSpace[dashboardId].viewMode === ViewMode.EDIT && + (Object.keys(dashboardStatesInSpace[dashboardId]).some( + (stateKey) => stateKey !== 'viewMode' + ) || + Object.keys(panelStatesInSpace?.[dashboardId]).length > 0) ) - ) - dashboardsWithUnsavedChanges.push(dashboardId); - }); + dashboardsSet.add(dashboardId); + } + ); + const dashboardsWithUnsavedChanges = [...dashboardsSet]; /** * Because we are storing these unsaved dashboard IDs in React component state, we only want things to be re-rendered diff --git a/src/plugins/dashboard/public/services/dashboard_backup/types.ts b/src/plugins/dashboard/public/services/dashboard_backup/types.ts index 70748085d3ee10..ee371a4463b568 100644 --- a/src/plugins/dashboard/public/services/dashboard_backup/types.ts +++ b/src/plugins/dashboard/public/services/dashboard_backup/types.ts @@ -7,12 +7,22 @@ */ import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { UnsavedPanelState } from '../../dashboard_container/types'; import { SavedDashboardInput } from '../dashboard_content_management/types'; export interface DashboardBackupServiceType { clearState: (id?: string) => void; - getState: (id: string | undefined) => Partial | undefined; - setState: (id: string | undefined, newState: Partial) => void; + getState: (id: string | undefined) => + | { + dashboardState?: Partial; + panels?: UnsavedPanelState; + } + | undefined; + setState: ( + id: string | undefined, + dashboardState: Partial, + panels: UnsavedPanelState + ) => void; getViewMode: () => ViewMode; storeViewMode: (viewMode: ViewMode) => void; getDashboardIdsWithUnsavedChanges: () => string[]; diff --git a/src/plugins/embeddable/README.md b/src/plugins/embeddable/README.md index d4c9a5ca231939..3373938215fba9 100644 --- a/src/plugins/embeddable/README.md +++ b/src/plugins/embeddable/README.md @@ -1,21 +1,26 @@ Embeddables are React components that manage their own state, can be serialized and deserialized, and return an API that can be used to interact with them imperatively. #### Guiding principles -* **Coupled to React:** Kibana is a React application, and the minimum unit of sharing is the React component. Embeddables enforce this by requiring a React component during registration. -* **Composition over inheritence:** Rather than an inheritance-based system with classes, imperative APIs are plain old typescript objects that implement any number of shared interfaces. Interfaces are enforced via type guards and are shared via Packages. -* **Internal state management:** Each embeddable manages its own state. This is because the embeddable system allows a page to render a registry of embeddable types that can change over time. This makes it untenable for a single page to manage state for every type of embeddable. The page is only responsible for persisting and providing the last persisted state to the embeddable on startup. + +- **Coupled to React:** Kibana is a React application, and the minimum unit of sharing is the React component. Embeddables enforce this by requiring a React component during registration. +- **Composition over inheritence:** Rather than an inheritance-based system with classes, imperative APIs are plain old typescript objects that implement any number of shared interfaces. Interfaces are enforced via type guards and are shared via Packages. +- **Internal state management:** Each embeddable manages its own state. This is because the embeddable system allows a page to render a registry of embeddable types that can change over time. This makes it untenable for a single page to manage state for every type of embeddable. The page is only responsible for persisting and providing the last persisted state to the embeddable on startup. #### Best practices -* **Do not use Embeddables to share Components between plugins: ** Only create an embeddable if your Component is rendered on a page that persists embeddable state and renders multiple embeddable types. For example, create an embeddable to render your Component on a Dashboard. Otherwise, use a vanilla React Component to share Components between plugins. -* **Do not use Embeddables to avoid circular plugin dependencies: ** Break your Component into a Package or another plugin to avoid circular plugin dependencies. -* **Minimal API surface area: ** Embeddable APIs are accessable to all Kibana systems and all embeddable siblings and parents. Functions and state that are internal to an embeddable including any child components should not be added to the API. Consider passing internal state to child as props or react context. + +- **Do not use Embeddables to share Components between plugins: ** Only create an embeddable if your Component is rendered on a page that persists embeddable state and renders multiple embeddable types. For example, create an embeddable to render your Component on a Dashboard. Otherwise, use a vanilla React Component to share Components between plugins. +- **Do not use Embeddables to avoid circular plugin dependencies: ** Break your Component into a Package or another plugin to avoid circular plugin dependencies. +- **Minimal API surface area: ** Embeddable APIs are accessable to all Kibana systems and all embeddable siblings and parents. Functions and state that are internal to an embeddable including any child components should not be added to the API. Consider passing internal state to child as props or react context. #### Examples + Examples available at [/examples/embeddable_examples](https://github.com/elastic/kibana/tree/main/examples/embeddable_examples) -* [Register an embeddable](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable.ts) -* [Embeddable that responds to Unified search](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx) -* [Embeddable that interacts with sibling embeddables](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx) -* [Render an embeddable](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx) + +- [Register an embeddable](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable.ts) +- [Embeddable that responds to Unified search](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx) +- [Embeddable that interacts with sibling embeddables](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx) +- [Embeddable that can be by value or by reference](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx) +- [Render an embeddable](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx) Run examples with `yarn start --run-examples` -To access example embeddables, create a new dashboard, click "Add panel" and finally select "Embeddable examples". \ No newline at end of file +To access example embeddables, create a new dashboard, click "Add panel" and finally select "Embeddable examples". diff --git a/src/plugins/embeddable/public/index.ts b/src/plugins/embeddable/public/index.ts index 7580e84f29e395..b00adeb711a5b0 100644 --- a/src/plugins/embeddable/public/index.ts +++ b/src/plugins/embeddable/public/index.ts @@ -98,8 +98,6 @@ export { ReactEmbeddableRenderer, type DefaultEmbeddableApi, type ReactEmbeddableFactory, - type ReactEmbeddableRegistration, - startTrackingEmbeddableUnsavedChanges, } from './react_embeddable_system'; export function plugin(initializerContext: PluginInitializerContext) { diff --git a/src/plugins/embeddable/public/lib/containers/container.ts b/src/plugins/embeddable/public/lib/containers/container.ts index d1a15bb2588f06..d7b5f56b2202ba 100644 --- a/src/plugins/embeddable/public/lib/containers/container.ts +++ b/src/plugins/embeddable/public/lib/containers/container.ts @@ -8,7 +8,7 @@ import deepEqual from 'fast-deep-equal'; import { isEqual, xor } from 'lodash'; -import { BehaviorSubject, EMPTY, merge, Subject, Subscription } from 'rxjs'; +import { BehaviorSubject, EMPTY, merge, Subscription } from 'rxjs'; import { catchError, combineLatestWith, @@ -22,7 +22,7 @@ import { import { v4 as uuidv4 } from 'uuid'; import { PanelPackage } from '@kbn/presentation-containers'; -import { PresentationContainer, SerializedPanelState } from '@kbn/presentation-containers'; +import { PresentationContainer } from '@kbn/presentation-containers'; import { isSavedObjectEmbeddableInput } from '../../../common/lib/saved_object_embeddable'; import { EmbeddableStart } from '../../plugin'; @@ -64,10 +64,6 @@ export abstract class Container< private subscription: Subscription | undefined; private readonly anyChildOutputChange$; - public lastSavedState: Subject = new Subject(); - public getLastSavedStateForChild: (childId: string) => SerializedPanelState | undefined = () => - undefined; - constructor( input: TContainerInput, output: TContainerOutput, diff --git a/src/plugins/embeddable/public/plugin.tsx b/src/plugins/embeddable/public/plugin.tsx index 334e4799ae3340..771db22cdd674a 100644 --- a/src/plugins/embeddable/public/plugin.tsx +++ b/src/plugins/embeddable/public/plugin.tsx @@ -58,8 +58,6 @@ import { import { getAllMigrations } from '../common/lib/get_all_migrations'; import { setKibanaServices } from './kibana_services'; import { - DefaultEmbeddableApi, - ReactEmbeddableFactory, reactEmbeddableRegistryHasKey, registerReactEmbeddableFactory, } from './react_embeddable_system'; @@ -108,13 +106,7 @@ export interface EmbeddableSetup { /** * Registers an async {@link ReactEmbeddableFactory} getter. */ - registerReactEmbeddableFactory: < - StateType extends object = object, - APIType extends DefaultEmbeddableApi = DefaultEmbeddableApi - >( - type: string, - getFactory: () => Promise> - ) => void; + registerReactEmbeddableFactory: typeof registerReactEmbeddableFactory; /** * @deprecated use {@link registerReactEmbeddableFactory} instead. diff --git a/src/plugins/embeddable/public/react_embeddable_system/index.ts b/src/plugins/embeddable/public/react_embeddable_system/index.ts index 00f77c87cb5b78..54917869508aff 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/index.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/index.ts @@ -11,9 +11,4 @@ export { registerReactEmbeddableFactory, } from './react_embeddable_registry'; export { ReactEmbeddableRenderer } from './react_embeddable_renderer'; -export { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; -export type { - DefaultEmbeddableApi, - ReactEmbeddableFactory, - ReactEmbeddableRegistration, -} from './types'; +export type { DefaultEmbeddableApi, ReactEmbeddableFactory } from './types'; diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts index 5cd245ca074cc0..b1d67cc8a1d905 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts @@ -14,16 +14,17 @@ const registry: { [key: string]: () => Promise> /** * Registers a new React embeddable factory. This should be called at plugin start time. * - * @param type The key to register the factory under. This should be the same as the `type` key in the factory definition. + * @param type The key to register the factory under. * @param getFactory an async function that gets the factory definition for this key. This should always async import the * actual factory definition file to avoid polluting page load. */ export const registerReactEmbeddableFactory = < - StateType extends object = object, - APIType extends DefaultEmbeddableApi = DefaultEmbeddableApi + SerializedState extends object = object, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi, + RuntimeState extends object = SerializedState >( type: string, - getFactory: () => Promise> + getFactory: () => Promise> ) => { if (registry[type] !== undefined) throw new Error( @@ -38,11 +39,12 @@ export const registerReactEmbeddableFactory = < export const reactEmbeddableRegistryHasKey = (key: string) => registry[key] !== undefined; export const getReactEmbeddableFactory = async < - StateType extends object = object, - ApiType extends DefaultEmbeddableApi = DefaultEmbeddableApi + SerializedState extends object = object, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi, + RuntimeState extends object = SerializedState >( key: string -): Promise> => { +): Promise> => { if (registry[key] === undefined) throw new Error( i18n.translate('embeddableApi.reactEmbeddable.factoryNotFoundError', { diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx index f4b9a4db439604..84cfa78e983b06 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx @@ -54,8 +54,19 @@ describe('react embeddable renderer', () => { setupPresentationPanelServices(); }); - it('deserializes given state', async () => { - render(); + it('deserializes unsaved state provided by the parent', async () => { + render( + ({ + getSerializedStateForChild: () => ({ + rawState: { + bork: 'blorp?', + }, + }), + })} + /> + ); await waitFor(() => { expect(testEmbeddableFactory.deserializeState).toHaveBeenCalledWith({ rawState: { bork: 'blorp?' }, @@ -65,13 +76,24 @@ describe('react embeddable renderer', () => { it('builds the embeddable', async () => { const buildEmbeddableSpy = jest.spyOn(testEmbeddableFactory, 'buildEmbeddable'); - render(); + render( + ({ + getSerializedStateForChild: () => ({ + rawState: { + bork: 'blorp?', + }, + }), + })} + /> + ); await waitFor(() => { expect(buildEmbeddableSpy).toHaveBeenCalledWith( { bork: 'blorp?' }, expect.any(Function), expect.any(String), - undefined + expect.any(Object) ); }); }); @@ -82,7 +104,13 @@ describe('react embeddable renderer', () => { ({ + getSerializedStateForChild: () => ({ + rawState: { + bork: 'blorp?', + }, + }), + })} /> ); await waitFor(() => { @@ -90,21 +118,22 @@ describe('react embeddable renderer', () => { { bork: 'blorp?' }, expect.any(Function), '12345', - undefined + expect.any(Object) ); }); }); it('builds the embeddable, providing a parent', async () => { const buildEmbeddableSpy = jest.spyOn(testEmbeddableFactory, 'buildEmbeddable'); - const parentApi = getMockPresentationContainer(); - render( - - ); + const parentApi = { + ...getMockPresentationContainer(), + getSerializedStateForChild: () => ({ + rawState: { + bork: 'blorp?', + }, + }), + }; + render( parentApi} />); await waitFor(() => { expect(buildEmbeddableSpy).toHaveBeenCalledWith( { bork: 'blorp?' }, @@ -119,7 +148,11 @@ describe('react embeddable renderer', () => { render( ({ + getSerializedStateForChild: () => ({ + rawState: { name: 'Kuni Garu', bork: 'Dara' }, + }), + })} /> ); await waitFor(() => { @@ -136,17 +169,22 @@ describe('react embeddable renderer', () => { type={'test'} maybeId={'12345'} onApiAvailable={onApiAvailable} - state={{ rawState: { name: 'Kuni Garu' } }} + getParentApi={() => ({ + getSerializedStateForChild: () => ({ + rawState: { name: 'Kuni Garu' }, + }), + })} /> ); await waitFor(() => expect(onApiAvailable).toHaveBeenCalledWith({ type: 'test', uuid: '12345', - parentApi: undefined, + parentApi: expect.any(Object), unsavedChanges: expect.any(Object), serializeState: expect.any(Function), resetUnsavedChanges: expect.any(Function), + snapshotRuntimeState: expect.any(Function), }) ); }); @@ -157,7 +195,11 @@ describe('react embeddable renderer', () => { ({ + getSerializedStateForChild: () => ({ + rawState: { name: 'Kuni Garu' }, + }), + })} /> ); await waitFor(() => diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx index 45cb648e1b6263..98a7a42244bb42 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx @@ -6,14 +6,14 @@ * Side Public License, v 1. */ -import { SerializedPanelState } from '@kbn/presentation-containers'; +import { HasSerializedChildState, SerializedPanelState } from '@kbn/presentation-containers'; import { PresentationPanel, PresentationPanelProps } from '@kbn/presentation-panel-plugin/public'; import { ComparatorDefinition, StateComparators } from '@kbn/presentation-publishing'; import React, { useEffect, useImperativeHandle, useMemo, useRef } from 'react'; -import { combineLatest, debounceTime, skip } from 'rxjs'; +import { combineLatest, debounceTime, skip, switchMap } from 'rxjs'; import { v4 as generateId } from 'uuid'; import { getReactEmbeddableFactory } from './react_embeddable_registry'; -import { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; +import { initializeReactEmbeddableState } from './react_embeddable_state'; import { DefaultEmbeddableApi, ReactEmbeddableApiRegistration } from './types'; const ON_STATE_CHANGE_DEBOUNCE = 100; @@ -24,25 +24,25 @@ const ON_STATE_CHANGE_DEBOUNCE = 100; * TODO: Rename this to simply `Embeddable` when the legacy Embeddable system is removed. */ export const ReactEmbeddableRenderer = < - StateType extends object = object, - ApiType extends DefaultEmbeddableApi = DefaultEmbeddableApi + SerializedState extends object = object, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi, + RuntimeState extends object = SerializedState, + ParentApi extends HasSerializedChildState = HasSerializedChildState >({ - maybeId, type, - state, - parentApi, - onApiAvailable, + maybeId, + getParentApi, panelProps, onAnyStateChange, + onApiAvailable, hidePanelChrome, }: { - maybeId?: string; type: string; - state: SerializedPanelState; - parentApi?: unknown; - onApiAvailable?: (api: ApiType) => void; + maybeId?: string; + getParentApi: () => ParentApi; + onApiAvailable?: (api: Api) => void; panelProps?: Pick< - PresentationPanelProps, + PresentationPanelProps, | 'showShadow' | 'showBorder' | 'showBadges' @@ -55,57 +55,73 @@ export const ReactEmbeddableRenderer = < * This `onAnyStateChange` callback allows the parent to keep track of the state of the embeddable * as it changes. This is **not** expected to change over the lifetime of the component. */ - onAnyStateChange?: (state: SerializedPanelState) => void; + onAnyStateChange?: (state: SerializedPanelState) => void; }) => { const cleanupFunction = useRef<(() => void) | null>(null); const componentPromise = useMemo( () => (async () => { + const parentApi = getParentApi(); const uuid = maybeId ?? generateId(); - const factory = await getReactEmbeddableFactory(type); - const registerApi = ( - apiRegistration: ReactEmbeddableApiRegistration, - comparators: StateComparators - ) => { - const { unsavedChanges, resetUnsavedChanges, cleanup } = - startTrackingEmbeddableUnsavedChanges( - uuid, - parentApi, - comparators, - factory.deserializeState - ); + const factory = await getReactEmbeddableFactory(type); + + const { initialState, startStateDiffing } = await initializeReactEmbeddableState< + SerializedState, + Api, + RuntimeState + >(uuid, factory, parentApi); + const buildApi = ( + apiRegistration: ReactEmbeddableApiRegistration, + comparators: StateComparators + ) => { if (onAnyStateChange) { /** * To avoid unnecessary re-renders, only subscribe to the comparator publishing subjects if * an `onAnyStateChange` callback is provided */ - const comparatorDefinitions: Array> = - Object.values(comparators); + const comparatorDefinitions: Array< + ComparatorDefinition + > = Object.values(comparators); combineLatest(comparatorDefinitions.map((comparator) => comparator[0])) - .pipe(skip(1), debounceTime(ON_STATE_CHANGE_DEBOUNCE)) - .subscribe(() => { - onAnyStateChange(apiRegistration.serializeState()); + .pipe( + skip(1), + debounceTime(ON_STATE_CHANGE_DEBOUNCE), + switchMap(() => { + const isAsync = + apiRegistration.serializeState.prototype?.name === 'AsyncFunction'; + return isAsync + ? (apiRegistration.serializeState() as Promise< + SerializedPanelState + >) + : Promise.resolve(apiRegistration.serializeState()); + }) + ) + .subscribe((serializedState) => { + onAnyStateChange(serializedState); }); } + const { unsavedChanges, resetUnsavedChanges, cleanup, snapshotRuntimeState } = + startStateDiffing(comparators); const fullApi = { ...apiRegistration, uuid, parentApi, unsavedChanges, - resetUnsavedChanges, type: factory.type, - } as unknown as ApiType; + resetUnsavedChanges, + snapshotRuntimeState, + } as unknown as Api; cleanupFunction.current = () => cleanup(); onApiAvailable?.(fullApi); return fullApi; }; const { api, Component } = await factory.buildEmbeddable( - factory.deserializeState(state), - registerApi, + initialState, + buildApi, uuid, parentApi ); @@ -132,7 +148,7 @@ export const ReactEmbeddableRenderer = < }, []); return ( - + hidePanelChrome={hidePanelChrome} {...panelProps} Component={componentPromise} diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.test.ts similarity index 54% rename from src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx rename to src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.test.ts index c230e7a3840a62..6f34b4f04bffd6 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.test.ts @@ -7,15 +7,17 @@ */ import { + HasRuntimeChildState, + HasSaveNotification, + HasSerializedChildState, PresentationContainer, - PublishesLastSavedState, - SerializedPanelState, } from '@kbn/presentation-containers'; import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; import { StateComparators } from '@kbn/presentation-publishing'; import { waitFor } from '@testing-library/react'; import { BehaviorSubject, Subject } from 'rxjs'; -import { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; +import { initializeReactEmbeddableState } from './react_embeddable_state'; +import { ReactEmbeddableFactory } from './types'; interface SuperTestStateType { name: string; @@ -24,29 +26,36 @@ interface SuperTestStateType { } describe('react embeddable unsaved changes', () => { - let initialState: SuperTestStateType; - let lastSavedState: SuperTestStateType; + let serializedStateForChild: SuperTestStateType; + let comparators: StateComparators; - let deserializeState: (state: SerializedPanelState) => SuperTestStateType; - let parentApi: (PresentationContainer & PublishesLastSavedState) | null; + let parentApi: PresentationContainer & + HasSerializedChildState & + Partial> & + HasSaveNotification; beforeEach(() => { - initialState = { + serializedStateForChild = { name: 'Sir Testsalot', age: 42, - tagline: 'A glutton for testing!', + tagline: `Oh he's a glutton for testing!`, }; - lastSavedState = { - name: 'Sir Testsalot', - age: 42, - tagline: 'A glutton for testing!', + parentApi = { + saveNotification$: new Subject(), + ...getMockPresentationContainer(), + getSerializedStateForChild: () => ({ rawState: serializedStateForChild }), + getRuntimeStateForChild: () => undefined, }; }); const initializeDefaultComparators = () => { - const nameSubject = new BehaviorSubject(initialState.name); - const ageSubject = new BehaviorSubject(initialState.age); - const taglineSubject = new BehaviorSubject(initialState.tagline); + const latestState: SuperTestStateType = { + ...serializedStateForChild, + ...(parentApi.getRuntimeStateForChild?.('uuid') ?? {}), + }; + const nameSubject = new BehaviorSubject(latestState.name); + const ageSubject = new BehaviorSubject(latestState.age); + const taglineSubject = new BehaviorSubject(latestState.tagline); const defaultComparators: StateComparators = { name: [nameSubject, jest.fn((nextName) => nameSubject.next(nextName))], age: [ageSubject, jest.fn((nextAge) => ageSubject.next(nextAge))], @@ -55,49 +64,58 @@ describe('react embeddable unsaved changes', () => { return defaultComparators; }; - const startTrackingUnsavedChanges = ( + const startTrackingUnsavedChanges = async ( customComparators?: StateComparators ) => { comparators = customComparators ?? initializeDefaultComparators(); - deserializeState = jest.fn((state) => state.rawState as SuperTestStateType); - parentApi = { - ...getMockPresentationContainer(), - getLastSavedStateForChild: () => ({ - rawState: lastSavedState as SerializedState, - }), - lastSavedState: new Subject(), + const factory: ReactEmbeddableFactory = { + type: 'superTest', + deserializeState: jest.fn().mockImplementation((state) => state.rawState), + buildEmbeddable: async (runtimeState, buildApi) => { + const api = buildApi({ serializeState: jest.fn() }, comparators); + return { api, Component: () => null }; + }, }; - return startTrackingEmbeddableUnsavedChanges('id', parentApi, comparators, deserializeState); + const { startStateDiffing } = await initializeReactEmbeddableState('uuid', factory, parentApi); + return startStateDiffing(comparators); }; - it('should return undefined unsaved changes when used without a parent context to provide the last saved state', async () => { - parentApi = null; - const unsavedChangesApi = startTrackingUnsavedChanges(); + it('should return undefined unsaved changes when parent API does not provide runtime state', async () => { + const unsavedChangesApi = await startTrackingUnsavedChanges(); + parentApi.getRuntimeStateForChild = undefined; expect(unsavedChangesApi).toBeDefined(); expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); }); - it('runs factory deserialize function on last saved state', async () => { - startTrackingUnsavedChanges(); - expect(deserializeState).toHaveBeenCalledWith({ rawState: lastSavedState }); + it('should return undefined unsaved changes when parent API does not have runtime state for this child', async () => { + const unsavedChangesApi = await startTrackingUnsavedChanges(); + // no change here becuase getRuntimeStateForChild already returns undefined + expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); }); it('should return unsaved changes subject initialized to undefined when no unsaved changes are detected', async () => { - const unsavedChangesApi = startTrackingUnsavedChanges(); + parentApi.getRuntimeStateForChild = () => ({ + name: 'Sir Testsalot', + age: 42, + tagline: `Oh he's a glutton for testing!`, + }); + const unsavedChangesApi = await startTrackingUnsavedChanges(); expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); }); it('should return unsaved changes subject initialized with diff when unsaved changes are detected', async () => { - initialState.tagline = 'Testing is my speciality!'; - const unsavedChangesApi = startTrackingUnsavedChanges(); + parentApi.getRuntimeStateForChild = () => ({ + tagline: 'Testing is my speciality!', + }); + const unsavedChangesApi = await startTrackingUnsavedChanges(); expect(unsavedChangesApi.unsavedChanges.value).toEqual({ tagline: 'Testing is my speciality!', }); }); it('should detect unsaved changes when state changes during the lifetime of the component', async () => { - const unsavedChangesApi = startTrackingUnsavedChanges(); + const unsavedChangesApi = await startTrackingUnsavedChanges(); expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); comparators.tagline[1]('Testing is my speciality!'); @@ -108,22 +126,25 @@ describe('react embeddable unsaved changes', () => { }); }); - it('should detect unsaved changes when last saved state changes during the lifetime of the component', async () => { - const unsavedChangesApi = startTrackingUnsavedChanges(); + it('current runtime state should become last saved state when parent save notification is triggered', async () => { + const unsavedChangesApi = await startTrackingUnsavedChanges(); expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); - lastSavedState.tagline = 'Some other tagline'; - parentApi?.lastSavedState.next(); + comparators.tagline[1]('Testing is my speciality!'); await waitFor(() => { expect(unsavedChangesApi.unsavedChanges.value).toEqual({ - // we expect `A glutton for testing!` here because that is the current state of the component. - tagline: 'A glutton for testing!', + tagline: 'Testing is my speciality!', }); }); + + parentApi.saveNotification$.next(); + await waitFor(() => { + expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); + }); }); it('should reset unsaved changes, calling given setters with last saved values. This should remove all unsaved state', async () => { - const unsavedChangesApi = startTrackingUnsavedChanges(); + const unsavedChangesApi = await startTrackingUnsavedChanges(); expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); comparators.tagline[1]('Testing is my speciality!'); @@ -134,16 +155,18 @@ describe('react embeddable unsaved changes', () => { }); unsavedChangesApi.resetUnsavedChanges(); - expect(comparators.tagline[1]).toHaveBeenCalledWith('A glutton for testing!'); + expect(comparators.tagline[1]).toHaveBeenCalledWith(`Oh he's a glutton for testing!`); await waitFor(() => { expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); }); }); it('uses a custom comparator when supplied', async () => { - lastSavedState.age = 20; - initialState.age = 50; - const ageSubject = new BehaviorSubject(initialState.age); + serializedStateForChild.age = 20; + parentApi.getRuntimeStateForChild = () => ({ + age: 50, + }); + const ageSubject = new BehaviorSubject(50); const customComparators: StateComparators = { ...initializeDefaultComparators(), age: [ @@ -153,7 +176,7 @@ describe('react embeddable unsaved changes', () => { ], }; - const unsavedChangesApi = startTrackingUnsavedChanges(customComparators); + const unsavedChangesApi = await startTrackingUnsavedChanges(customComparators); // here we expect there to be no unsaved changes, both unsaved state and last saved state have two digits. expect(unsavedChangesApi.unsavedChanges.value).toBe(undefined); diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.ts b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.ts new file mode 100644 index 00000000000000..605b8d20a7cd1d --- /dev/null +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_state.ts @@ -0,0 +1,120 @@ +/* + * 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 { + apiHasRuntimeChildState, + apiHasSaveNotification, + HasSerializedChildState, +} from '@kbn/presentation-containers'; +import { + getInitialValuesFromComparators, + PublishingSubject, + runComparators, + StateComparators, +} from '@kbn/presentation-publishing'; +import { + BehaviorSubject, + combineLatest, + combineLatestWith, + debounceTime, + map, + Subscription, +} from 'rxjs'; +import { DefaultEmbeddableApi, ReactEmbeddableFactory } from './types'; + +export const initializeReactEmbeddableState = async < + SerializedState extends object = object, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi, + RuntimeState extends object = SerializedState +>( + uuid: string, + factory: ReactEmbeddableFactory, + parentApi: HasSerializedChildState +) => { + const lastSavedRuntimeState = await factory.deserializeState( + parentApi.getSerializedStateForChild(uuid) + ); + + // If the parent provides runtime state for the child (usually as a state backup or cache), + // we merge it with the last saved runtime state. + const partialRuntimeState = apiHasRuntimeChildState(parentApi) + ? parentApi.getRuntimeStateForChild(uuid) ?? ({} as Partial) + : ({} as Partial); + + const initialRuntimeState = { ...lastSavedRuntimeState, ...partialRuntimeState }; + + const startStateDiffing = (comparators: StateComparators) => { + const subscription = new Subscription(); + const snapshotRuntimeState = () => { + const comparatorKeys = Object.keys(comparators) as Array; + return comparatorKeys.reduce((acc, key) => { + acc[key] = comparators[key][0].value as RuntimeState[typeof key]; + return acc; + }, {} as RuntimeState); + }; + + // the last saved state subject is always initialized with the deserialized state from the parent. + const lastSavedState$ = new BehaviorSubject(lastSavedRuntimeState); + if (apiHasSaveNotification(parentApi)) { + subscription.add( + // any time the parent saves, the current state becomes the last saved state... + parentApi.saveNotification$.subscribe(() => { + lastSavedState$.next(snapshotRuntimeState()); + }) + ); + } + + const comparatorSubjects: Array> = []; + const comparatorKeys: Array = []; + for (const key of Object.keys(comparators) as Array) { + const comparatorSubject = comparators[key][0]; // 0th element of tuple is the subject + comparatorSubjects.push(comparatorSubject as PublishingSubject); + comparatorKeys.push(key); + } + + const unsavedChanges = new BehaviorSubject | undefined>( + runComparators( + comparators, + comparatorKeys, + lastSavedState$.getValue() as RuntimeState, + getInitialValuesFromComparators(comparators, comparatorKeys) + ) + ); + + subscription.add( + combineLatest(comparatorSubjects) + .pipe( + debounceTime(100), + map((latestStates) => + comparatorKeys.reduce((acc, key, index) => { + acc[key] = latestStates[index] as RuntimeState[typeof key]; + return acc; + }, {} as Partial) + ), + combineLatestWith(lastSavedState$) + ) + .subscribe(([latest, last]) => { + unsavedChanges.next(runComparators(comparators, comparatorKeys, last, latest)); + }) + ); + return { + unsavedChanges, + resetUnsavedChanges: () => { + const lastSaved = lastSavedState$.getValue(); + for (const key of comparatorKeys) { + const setter = comparators[key][1]; // setter function is the 1st element of the tuple + setter(lastSaved?.[key] as RuntimeState[typeof key]); + } + }, + snapshotRuntimeState, + cleanup: () => subscription.unsubscribe(), + }; + }; + + return { initialState: initialRuntimeState, startStateDiffing }; +}; diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts deleted file mode 100644 index 4df8bd9df287a7..00000000000000 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts +++ /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 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 { - getLastSavedStateSubjectForChild, - SerializedPanelState, -} from '@kbn/presentation-containers'; -import { - getInitialValuesFromComparators, - PublishingSubject, - runComparators, - StateComparators, -} from '@kbn/presentation-publishing'; -import { BehaviorSubject, combineLatest } from 'rxjs'; -import { combineLatestWith, debounceTime, map } from 'rxjs'; - -const getDefaultDiffingApi = () => { - return { - unsavedChanges: new BehaviorSubject(undefined), - resetUnsavedChanges: () => {}, - cleanup: () => {}, - }; -}; - -export const startTrackingEmbeddableUnsavedChanges = < - SerializedState extends object = object, - RuntimeState extends object = object ->( - uuid: string, - parentApi: unknown, - comparators: StateComparators, - deserializeState: (state: SerializedPanelState) => RuntimeState -) => { - if (Object.keys(comparators).length === 0) return getDefaultDiffingApi(); - - const lastSavedStateSubject = getLastSavedStateSubjectForChild( - parentApi, - uuid, - deserializeState - ); - if (!lastSavedStateSubject) return getDefaultDiffingApi(); - - const comparatorSubjects: Array> = []; - const comparatorKeys: Array = []; - for (const key of Object.keys(comparators) as Array) { - const comparatorSubject = comparators[key][0]; // 0th element of tuple is the subject - comparatorSubjects.push(comparatorSubject as PublishingSubject); - comparatorKeys.push(key); - } - - const unsavedChanges = new BehaviorSubject | undefined>( - runComparators( - comparators, - comparatorKeys, - lastSavedStateSubject?.getValue(), - getInitialValuesFromComparators(comparators, comparatorKeys) - ) - ); - - const subscription = combineLatest(comparatorSubjects) - .pipe( - debounceTime(100), - map((latestStates) => - comparatorKeys.reduce((acc, key, index) => { - acc[key] = latestStates[index] as RuntimeState[typeof key]; - return acc; - }, {} as Partial) - ), - combineLatestWith(lastSavedStateSubject) - ) - .subscribe(([latestStates, lastSavedState]) => { - unsavedChanges.next( - runComparators(comparators, comparatorKeys, lastSavedState, latestStates) - ); - }); - - return { - unsavedChanges, - resetUnsavedChanges: () => { - const lastSaved = lastSavedStateSubject?.getValue(); - for (const key of comparatorKeys) { - const setter = comparators[key][1]; // setter function is the 1st element of the tuple - setter(lastSaved?.[key] as RuntimeState[typeof key]); - } - }, - cleanup: () => subscription.unsubscribe(), - }; -}; diff --git a/src/plugins/embeddable/public/react_embeddable_system/types.ts b/src/plugins/embeddable/public/react_embeddable_system/types.ts index 89b2ac3d98af43..f0ff899f5df69f 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/types.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/types.ts @@ -5,34 +5,41 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { HasSerializableState, SerializedPanelState } from '@kbn/presentation-containers'; +import { + HasSerializableState, + HasSnapshottableState, + SerializedPanelState, +} from '@kbn/presentation-containers'; import { DefaultPresentationPanelApi } from '@kbn/presentation-panel-plugin/public/panel_component/types'; import { HasType, PublishesUnsavedChanges, StateComparators } from '@kbn/presentation-publishing'; -import React, { ReactElement } from 'react'; - -export type ReactEmbeddableRegistration< - ApiType extends DefaultEmbeddableApi = DefaultEmbeddableApi -> = (ref: React.ForwardedRef) => ReactElement | null; +import { MaybePromise } from '@kbn/utility-types'; +import React from 'react'; /** * The default embeddable API that all Embeddables must implement. * * Before adding anything to this interface, please be certain that it belongs in *every* embeddable. */ -export interface DefaultEmbeddableApi - extends DefaultPresentationPanelApi, +export interface DefaultEmbeddableApi< + SerializedState extends object = object, + RuntimeState extends object = SerializedState +> extends DefaultPresentationPanelApi, HasType, PublishesUnsavedChanges, - HasSerializableState {} + HasSerializableState, + HasSnapshottableState {} /** * A subset of the default embeddable API used in registration to allow implementors to omit aspects * of the API that will be automatically added by the system. */ export type ReactEmbeddableApiRegistration< - StateType extends object = object, - ApiType extends DefaultEmbeddableApi = DefaultEmbeddableApi -> = Omit; + SerializedState extends object = object, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi +> = Omit< + Api, + 'uuid' | 'parent' | 'type' | 'unsavedChanges' | 'resetUnsavedChanges' | 'snapshotRuntimeState' +>; /** * The React Embeddable Factory interface is used to register a series of functions that @@ -43,7 +50,7 @@ export type ReactEmbeddableApiRegistration< **/ export interface ReactEmbeddableFactory< SerializedState extends object = object, - ApiType extends DefaultEmbeddableApi = DefaultEmbeddableApi, + Api extends DefaultEmbeddableApi = DefaultEmbeddableApi, RuntimeState extends object = SerializedState > { /** @@ -53,16 +60,16 @@ export interface ReactEmbeddableFactory< type: string; /** - * A required synchronous function that transforms serialized state into runtime state. - * This will be used twice - once for the parent state, and once for the last saved state - * for comparison. - * - * This can also be used to: + * A required asynchronous function that transforms serialized state into runtime state. * + * This could be used to: + * - Load state from some external store * - Inject references provided by the parent * - Migrate the state to a newer version (this must be undone when serializing) */ - deserializeState: (state: SerializedPanelState) => RuntimeState; + deserializeState: ( + panelState: SerializedPanelState + ) => MaybePromise; /** * A required async function that builds your embeddable component and a linked API instance. The API @@ -75,10 +82,10 @@ export interface ReactEmbeddableFactory< buildEmbeddable: ( initialState: RuntimeState, buildApi: ( - apiRegistration: ReactEmbeddableApiRegistration, + apiRegistration: ReactEmbeddableApiRegistration, comparators: StateComparators - ) => ApiType, + ) => Api, uuid: string, parentApi?: unknown - ) => Promise<{ Component: React.FC<{}>; api: ApiType }>; + ) => Promise<{ Component: React.FC<{}>; api: Api }>; } diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index fd317d09ddfd9e..f275cdfceff3e6 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -65,9 +65,13 @@ const renderReactEmbeddable = ({ ({ + ...container, + getSerializedStateForChild: () => ({ + rawState: input, + }), + })} key={`${type}_${uuid}`} - state={{ rawState: input }} onAnyStateChange={(newState) => { const newExpression = embeddableInputToExpression( newState.rawState as unknown as EmbeddableInput, diff --git a/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx b/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx index 4eb6ccaacb5d9a..fe37862f8f3d81 100644 --- a/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx +++ b/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx @@ -9,7 +9,8 @@ import { useCallback, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { BehaviorSubject } from 'rxjs'; -import { EmbeddableInput, ViewMode } from '@kbn/embeddable-plugin/common'; +import { EmbeddableInput } from '@kbn/embeddable-plugin/common'; +import { ViewMode } from '@kbn/presentation-publishing'; import { embeddableInputToExpression } from '../../../canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression'; import { CanvasContainerApi } from '../../../types'; @@ -35,9 +36,9 @@ export const useCanvasApi: () => CanvasContainerApi = () => { [selectedPageId, dispatch] ); - const getCanvasApi = useCallback(() => { + const getCanvasApi = useCallback((): CanvasContainerApi => { return { - viewMode: new BehaviorSubject(ViewMode.EDIT), // always in edit mode + viewMode: new BehaviorSubject('edit'), // always in edit mode addNewPanel: async ({ panelType, initialState, @@ -47,7 +48,11 @@ export const useCanvasApi: () => CanvasContainerApi = () => { }) => { createNewEmbeddable(panelType, initialState); }, - } as CanvasContainerApi; + /** + * getSerializedStateForChild is left out here because we cannot access the state here. That method + * is injected in `x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx` + */ + } as unknown as CanvasContainerApi; }, [createNewEmbeddable]); return useMemo(() => getCanvasApi(), [getCanvasApi]); diff --git a/x-pack/plugins/canvas/types/embeddables.ts b/x-pack/plugins/canvas/types/embeddables.ts index 38aae5f33be7be..ac574b2fce460e 100644 --- a/x-pack/plugins/canvas/types/embeddables.ts +++ b/x-pack/plugins/canvas/types/embeddables.ts @@ -9,7 +9,7 @@ import type { TimeRange } from '@kbn/es-query'; import { Filter } from '@kbn/es-query'; import { EmbeddableInput as Input } from '@kbn/embeddable-plugin/common'; import { HasAppContext, PublishesViewMode } from '@kbn/presentation-publishing'; -import { CanAddNewPanel } from '@kbn/presentation-containers'; +import { CanAddNewPanel, HasSerializedChildState } from '@kbn/presentation-containers'; export type EmbeddableInput = Input & { timeRange?: TimeRange; @@ -17,4 +17,7 @@ export type EmbeddableInput = Input & { savedObjectId?: string; }; -export type CanvasContainerApi = PublishesViewMode & CanAddNewPanel & Partial; +export type CanvasContainerApi = PublishesViewMode & + CanAddNewPanel & + HasSerializedChildState & + Partial; diff --git a/x-pack/plugins/ml/public/cases/anomaly_swim_lane_attachment.tsx b/x-pack/plugins/ml/public/cases/anomaly_swim_lane_attachment.tsx index 5a0429725eb791..08406d4acc44f7 100644 --- a/x-pack/plugins/ml/public/cases/anomaly_swim_lane_attachment.tsx +++ b/x-pack/plugins/ml/public/cases/anomaly_swim_lane_attachment.tsx @@ -86,16 +86,16 @@ export const initComponent = memoize((fieldFormats: FieldFormatsStart) => { maybeId={inputProps.id} type={CASE_ATTACHMENT_TYPE_ID_ANOMALY_SWIMLANE} - state={{ - rawState: inputProps, - }} - parentApi={{ + getParentApi={() => ({ + getSerializedStateForChild: () => ({ + rawState: inputProps, + }), executionContext: { type: 'cases', description: caseData.title, id: caseData.id, }, - }} + })} /> ); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx index 65e09e1ef06699..4765950b341f90 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx @@ -100,16 +100,14 @@ describe('getAnomalySwimLaneEmbeddableFactory', () => { maybeId={'maybe_id'} type={ANOMALY_SWIMLANE_EMBEDDABLE_TYPE} - state={{ - rawState, - }} onApiAvailable={onApiAvailable} - parentApi={{ + getParentApi={() => ({ + getSerializedStateForChild: () => ({ rawState }), executionContext: { type: 'dashboard', id: 'dashboard-id', }, - }} + })} /> ); diff --git a/x-pack/plugins/ml/public/shared_components/anomaly_swim_lane.tsx b/x-pack/plugins/ml/public/shared_components/anomaly_swim_lane.tsx index 18594d02c3cb32..b7748a753cc5c3 100644 --- a/x-pack/plugins/ml/public/shared_components/anomaly_swim_lane.tsx +++ b/x-pack/plugins/ml/public/shared_components/anomaly_swim_lane.tsx @@ -9,6 +9,7 @@ import type { KibanaExecutionContext } from '@kbn/core/public'; import { ReactEmbeddableRenderer } from '@kbn/embeddable-plugin/public'; import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import type { PublishesWritableUnifiedSearch } from '@kbn/presentation-publishing'; +import type { HasSerializedChildState } from '@kbn/presentation-containers'; import React, { useEffect, useMemo, useRef, type FC } from 'react'; import { BehaviorSubject } from 'rxjs'; import type { @@ -72,13 +73,16 @@ export const AnomalySwimLane: FC = ({ ); const parentApi = useMemo< - PublishesWritableUnifiedSearch & { executionContext: KibanaExecutionContext } + PublishesWritableUnifiedSearch & { + executionContext: KibanaExecutionContext; + } & HasSerializedChildState >(() => { const filters$ = new BehaviorSubject(filters); const query$ = new BehaviorSubject(query); const timeRange$ = new BehaviorSubject(timeRange); return { + getSerializedStateForChild: () => ({ rawState }), filters$, setFilters: (newFilters) => { filters$.next(newFilters); @@ -115,10 +119,7 @@ export const AnomalySwimLane: FC = ({ maybeId={id} type={ANOMALY_SWIMLANE_EMBEDDABLE_TYPE} - state={{ - rawState, - }} - parentApi={parentApi} + getParentApi={() => parentApi} onApiAvailable={(api) => { embeddableApi.current = api; }} diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx index 068d8395ea512e..c7f95d788e676f 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/custom_panels/apm/embeddable_root.tsx @@ -82,7 +82,7 @@ export function APMEmbeddableRoot({ return ( ({ getSerializedStateForChild: () => ({ rawState: input }) })} hidePanelChrome={true} /> ); From 564dec56b49e74df83b9209405ce3917f69f0973 Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Tue, 21 May 2024 23:02:53 +0200 Subject: [PATCH 77/97] [KQL] Add util for getting field names from KQL expression (#183573) ## Summary Resolves https://github.com/elastic/kibana/issues/180555. Adds a utility to kbn-es-query for getting the field names associated with a KQL expression. This utility already (mostly) existed in x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.ts but didn't have test coverage for things like wildcards and nested fields. This also updates the utility to be a little more robust in checking the KQL node types. ### Checklist - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Matthew Kime Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-es-query/index.ts | 2 + packages/kbn-es-query/src/kuery/index.ts | 7 +- .../src/kuery/utils/get_kql_fields.test.ts | 84 +++++++++++++++++++ .../src/kuery/utils/get_kql_fields.ts | 45 ++++++++++ .../kbn-es-query/src/kuery/utils/index.ts | 1 + .../apm/common/service_groups.ts | 5 +- .../apm/common/utils/get_kuery_fields.test.ts | 70 ---------------- .../apm/common/utils/get_kuery_fields.ts | 27 ------ .../shared/unified_search_bar/index.tsx | 12 ++- .../collect_data_telemetry/tasks.ts | 21 +++-- .../components/validation.test.ts | 2 - 11 files changed, 159 insertions(+), 117 deletions(-) create mode 100644 packages/kbn-es-query/src/kuery/utils/get_kql_fields.test.ts create mode 100644 packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts delete mode 100644 x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.test.ts delete mode 100644 x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.ts diff --git a/packages/kbn-es-query/index.ts b/packages/kbn-es-query/index.ts index 1bac3ff24ec465..943d3dc28f5702 100644 --- a/packages/kbn-es-query/index.ts +++ b/packages/kbn-es-query/index.ts @@ -118,6 +118,8 @@ export { toElasticsearchQuery, escapeKuery, escapeQuotes, + getKqlFieldNames, + getKqlFieldNamesFromExpression, } from './src/kuery'; export { diff --git a/packages/kbn-es-query/src/kuery/index.ts b/packages/kbn-es-query/src/kuery/index.ts index 002c67b19c7dc6..3e1576bc576e9f 100644 --- a/packages/kbn-es-query/src/kuery/index.ts +++ b/packages/kbn-es-query/src/kuery/index.ts @@ -23,5 +23,10 @@ export const toElasticsearchQuery = (...params: Parameters { + it('returns single kuery field', () => { + const expression = 'service.name: my-service'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['service.name']); + }); + + it('returns kuery fields with wildcard', () => { + const expression = 'service.name: *'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['service.name']); + }); + + it('returns multiple fields used AND operator', () => { + const expression = 'service.name: my-service AND service.environment: production'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual([ + 'service.name', + 'service.environment', + ]); + }); + + it('returns multiple kuery fields with OR operator', () => { + const expression = 'network.carrier.mcc: test or child.id: 33'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['network.carrier.mcc', 'child.id']); + }); + + it('returns multiple kuery fields with wildcard', () => { + const expression = 'network.carrier.mcc:* or child.id: *'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['network.carrier.mcc', 'child.id']); + }); + + it('returns single kuery fields with gt operator', () => { + const expression = 'transaction.duration.aggregate > 10'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['transaction.duration.aggregate']); + }); + + it('returns duplicate fields', () => { + const expression = 'service.name: my-service and service.name: my-service and trace.id: trace'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual([ + 'service.name', + 'service.name', + 'trace.id', + ]); + }); + + it('returns multiple fields with multiple logical operators', () => { + const expression = + '(service.name:opbeans-* OR service.name:kibana) and (service.environment:production)'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual([ + 'service.name', + 'service.name', + 'service.environment', + ]); + }); + + it('returns nested fields', () => { + const expression = 'user.names:{ first: "Alice" and last: "White" }'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['user.names']); + }); + + it('returns wildcard fields', () => { + const expression = 'server.*: kibana'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['server.*']); + }); + + // _field_caps doesn't allow escaped wildcards, so for now this behavior is what we want + it('returns escaped fields', () => { + const expression = 'server.\\*: kibana'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual(['server.*']); + }); + + it('do not return if kuery field is null', () => { + const expression = 'opbean'; + expect(getKqlFieldNamesFromExpression(expression)).toEqual([]); + }); +}); diff --git a/packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts b/packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts new file mode 100644 index 00000000000000..7cef22b3f89c7a --- /dev/null +++ b/packages/kbn-es-query/src/kuery/utils/get_kql_fields.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 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 { fromKueryExpression, KueryNode } from '../../..'; +import { nodeTypes } from '../node_types'; +import { functions } from '../functions'; + +export function getKqlFieldNamesFromExpression(expression: string): string[] { + const node = fromKueryExpression(expression); + return getKqlFieldNames(node); +} + +export function getKqlFieldNames(node: KueryNode): string[] { + if (nodeTypes.function.isNode(node)) { + if (functions.and.isNode(node) || functions.or.isNode(node)) { + return node.arguments.reduce((result, child) => { + return result.concat(getKqlFieldNames(child)); + }, []); + } else if ( + functions.not.isNode(node) || + functions.exists.isNode(node) || + functions.is.isNode(node) || + functions.nested.isNode(node) || + functions.range.isNode(node) + ) { + // For each of these field types, we only need to look at the first argument to determine the fields + const [fieldNode] = node.arguments; + return getKqlFieldNames(fieldNode); + } else { + throw new Error(`KQL function ${node.function} not supported in getKqlFieldNames`); + } + } else if (nodeTypes.literal.isNode(node)) { + if (node.value === null) return []; + return [`${nodeTypes.literal.toElasticsearchQuery(node)}`]; + } else if (nodeTypes.wildcard.isNode(node)) { + return [nodeTypes.wildcard.toElasticsearchQuery(node)]; + } else { + throw new Error(`KQL node type ${node.type} not supported in getKqlFieldNames`); + } +} diff --git a/packages/kbn-es-query/src/kuery/utils/index.ts b/packages/kbn-es-query/src/kuery/utils/index.ts index 8726b56a466cc9..31e19c713fc0de 100644 --- a/packages/kbn-es-query/src/kuery/utils/index.ts +++ b/packages/kbn-es-query/src/kuery/utils/index.ts @@ -7,3 +7,4 @@ */ export { escapeKuery, escapeQuotes } from './escape_kuery'; +export { getKqlFieldNames, getKqlFieldNamesFromExpression } from './get_kql_fields'; diff --git a/x-pack/plugins/observability_solution/apm/common/service_groups.ts b/x-pack/plugins/observability_solution/apm/common/service_groups.ts index b93ecffc2ab5ba..035aa06c83d323 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_groups.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_groups.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { fromKueryExpression } from '@kbn/es-query'; +import { getKqlFieldNamesFromExpression } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; -import { getKueryFields } from './utils/get_kuery_fields'; import { AGENT_NAME, SERVICE_NAME, @@ -51,7 +50,7 @@ export function validateServiceGroupKuery(kuery: string): { message?: string; } { try { - const kueryFields = getKueryFields([fromKueryExpression(kuery)]); + const kueryFields = getKqlFieldNamesFromExpression(kuery); const unsupportedKueryFields = kueryFields.filter((fieldName) => !isSupportedField(fieldName)); if (unsupportedKueryFields.length === 0) { return { isValidFields: true, isValidSyntax: true }; diff --git a/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.test.ts b/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.test.ts deleted file mode 100644 index e8620c9580adf4..00000000000000 --- a/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { getKueryFields } from './get_kuery_fields'; -import { fromKueryExpression } from '@kbn/es-query'; - -describe('get kuery fields', () => { - it('returns single kuery field', () => { - const kuery = 'service.name: my-service'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['service.name']); - }); - - it('returns kuery fields with wildcard', () => { - const kuery = 'service.name: *'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['service.name']); - }); - - it('returns multiple fields used AND operator', () => { - const kuery = 'service.name: my-service AND service.environment: production'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['service.name', 'service.environment']); - }); - - it('returns multiple kuery fields with OR operator', () => { - const kuery = 'network.carrier.mcc: test or child.id: 33'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['network.carrier.mcc', 'child.id']); - }); - - it('returns multiple kuery fields with wildcard', () => { - const kuery = 'network.carrier.mcc:* or child.id: *'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['network.carrier.mcc', 'child.id']); - }); - - it('returns single kuery fields with gt operator', () => { - const kuery = 'transaction.duration.aggregate > 10'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual(['transaction.duration.aggregate']); - }); - - it('returns dublicate fields', () => { - const kueries = ['service.name: my-service', 'service.name: my-service and trace.id: trace']; - - const kueryNodes = kueries.map((kuery) => fromKueryExpression(kuery)); - expect(getKueryFields(kueryNodes)).toEqual(['service.name', 'service.name', 'trace.id']); - }); - - it('returns multiple fields with multiple logical operators', () => { - const kuery = - '(service.name:opbeans-* OR service.name:kibana) and (service.environment:production)'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual([ - 'service.name', - 'service.name', - 'service.environment', - ]); - }); - - it('do not return if kuery field is null', () => { - const kuery = 'opbean'; - const kueryNode = fromKueryExpression(kuery); - expect(getKueryFields([kueryNode])).toEqual([]); - }); -}); diff --git a/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.ts b/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.ts deleted file mode 100644 index 0318e5bf0fe20a..00000000000000 --- a/x-pack/plugins/observability_solution/apm/common/utils/get_kuery_fields.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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { KueryNode } from '@kbn/es-query'; -import { compact } from 'lodash'; - -export function getKueryFields(nodes: KueryNode[]): string[] { - const allFields = nodes - .map((node) => { - const { - arguments: [fieldNameArg], - } = node; - - if (fieldNameArg.type === 'function') { - return getKueryFields(node.arguments); - } - - return fieldNameArg.value; - }) - .flat(); - - return compact(allFields); -} diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/unified_search_bar/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/unified_search_bar/index.tsx index a1b5b7b7557a16..4e86f331e520f9 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/unified_search_bar/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/unified_search_bar/index.tsx @@ -6,7 +6,14 @@ */ import React, { useCallback, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; -import { Filter, fromKueryExpression, Query, TimeRange, toElasticsearchQuery } from '@kbn/es-query'; +import { + Filter, + fromKueryExpression, + getKqlFieldNamesFromExpression, + Query, + TimeRange, + toElasticsearchQuery, +} from '@kbn/es-query'; import { useHistory, useLocation } from 'react-router-dom'; import deepEqual from 'fast-deep-equal'; import { useKibana } from '@kbn/kibana-react-plugin/public'; @@ -27,7 +34,6 @@ import { useLegacyUrlParams } from '../../../context/url_params_context/use_url_ import { clearCache } from '../../../services/rest/call_api'; import { useTimeRangeId } from '../../../context/time_range_id/use_time_range_id'; import { toBoolean, toNumber } from '../../../context/url_params_context/helpers'; -import { getKueryFields } from '../../../../common/utils/get_kuery_fields'; import { SearchQueryActions } from '../../../services/telemetry'; export const DEFAULT_REFRESH_INTERVAL = 60000; @@ -228,7 +234,7 @@ export function UnifiedSearchBar({ if (!res) { return; } - const kueryFields = getKueryFields([fromKueryExpression(query?.query as string)]); + const kueryFields = getKqlFieldNamesFromExpression(query?.query as string); const existingQueryParams = toQuery(location.search); const updatedQueryWithTime = { diff --git a/x-pack/plugins/observability_solution/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/observability_solution/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index 7bf03245d039e2..13dddf6c33bdc7 100644 --- a/x-pack/plugins/observability_solution/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/observability_solution/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -5,7 +5,7 @@ * 2.0. */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { fromKueryExpression } from '@kbn/es-query'; +import { getKqlFieldNamesFromExpression } from '@kbn/es-query'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { createHash } from 'crypto'; import { flatten, merge, pickBy, sortBy, sum, uniq } from 'lodash'; @@ -54,7 +54,6 @@ import { SavedServiceGroup, } from '../../../../common/service_groups'; import { asMutableArray } from '../../../../common/utils/as_mutable_array'; -import { getKueryFields } from '../../../../common/utils/get_kuery_fields'; import { APMError } from '../../../../typings/es_schemas/ui/apm_error'; import { AgentName } from '../../../../typings/es_schemas/ui/fields/agent'; import { Span } from '../../../../typings/es_schemas/ui/span'; @@ -1409,11 +1408,10 @@ export const tasks: TelemetryTask[] = [ namespaces: ['*'], }); - const kueryNodes = response.saved_objects.map(({ attributes: { kuery } }) => - fromKueryExpression(kuery) - ); - - const kueryFields = getKueryFields(kueryNodes); + const kueryExpressions = response.saved_objects.map(({ attributes: { kuery } }) => kuery); + const kueryFields = kueryExpressions + .map(getKqlFieldNamesFromExpression) + .reduce((a, b) => a.concat(b), []); return { service_groups: { @@ -1435,11 +1433,12 @@ export const tasks: TelemetryTask[] = [ namespaces: ['*'], }); - const kueryNodes = response.saved_objects.map(({ attributes: { kuery } }) => - fromKueryExpression(kuery ?? '') + const kueryExpressions = response.saved_objects.map( + ({ attributes: { kuery } }) => kuery ?? '' ); - - const kueryFields = getKueryFields(kueryNodes); + const kueryFields = kueryExpressions + .map(getKqlFieldNamesFromExpression) + .reduce((a, b) => a.concat(b), []); return { custom_dashboards: { diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/validation.test.ts b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/validation.test.ts index f1c5bc95767631..d4d68194a8492d 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/validation.test.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/validation.test.ts @@ -15,9 +15,7 @@ import { EQUATION_REGEX, validateCustomThreshold } from './validation'; const errorReason = 'this should appear as error reason'; jest.mock('@kbn/es-query', () => { - const actual = jest.requireActual('@kbn/es-query'); return { - ...actual, buildEsQuery: jest.fn(() => { // eslint-disable-next-line no-throw-literal throw { shortMessage: errorReason }; From b81225ae7a8db658b42f51c9a2b5300de1e79682 Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Tue, 21 May 2024 22:41:21 +0100 Subject: [PATCH 78/97] [main] Sync bundled packages with Package Storage (#183962) Automated by https://buildkite.com/elastic/package-storage-infra-kibana-discover-release-branches/builds/731 --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index 7bbccae8a39e05..4f64dc77d5e892 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -30,7 +30,7 @@ }, { "name": "elastic_agent", - "version": "1.19.0" + "version": "1.19.1" }, { "name": "endpoint", From 6e851a804ef68fef50aed37ec81eb61394d25c93 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 22 May 2024 00:22:40 +0200 Subject: [PATCH 79/97] [Alert table] Fix kibana.alert.rule.execution.timstamp timezone and format (#183905) Related to #182650 ## Summary Fix `kibana.alert.rule.execution.timstamp` timezone and format |Before|After| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/1593aac3-7417-4db2-9822-3ef1a0289ca1)|![image](https://github.com/elastic/kibana/assets/12370520/75bf7e37-14b2-43dd-a6ea-522d17d96df7)| --- .../public/components/alerts_table/common/render_cell_value.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/common/render_cell_value.tsx b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/common/render_cell_value.tsx index 22289706784e7d..6f6eb54a333d1d 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alerts_table/common/render_cell_value.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_table/common/render_cell_value.tsx @@ -20,6 +20,7 @@ import { ALERT_RULE_NAME, ALERT_RULE_CATEGORY, ALERT_START, + ALERT_RULE_EXECUTION_TIMESTAMP, } from '@kbn/rule-data-utils'; import { isEmpty } from 'lodash'; import type { TimelineNonEcsData } from '@kbn/timelines-plugin/common'; @@ -97,6 +98,7 @@ export const getRenderCellValue = ({ return ; case TIMESTAMP: case ALERT_START: + case ALERT_RULE_EXECUTION_TIMESTAMP: return ; case ALERT_DURATION: return asDuration(Number(value)); From 5a939b0770d12bfe3ee0d72539a67e2a960cac38 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 21 May 2024 16:35:55 -0600 Subject: [PATCH 80/97] [embeddable rebuild] Embeddable key concepts documentation (#183942) PR adds a "Key concepts" section for embeddable overview documenation --------- Co-authored-by: Devon Thomson --- src/plugins/embeddable/README.md | 49 +++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/plugins/embeddable/README.md b/src/plugins/embeddable/README.md index 3373938215fba9..0612226664da4d 100644 --- a/src/plugins/embeddable/README.md +++ b/src/plugins/embeddable/README.md @@ -1,18 +1,47 @@ Embeddables are React components that manage their own state, can be serialized and deserialized, and return an API that can be used to interact with them imperatively. -#### Guiding principles +### Guiding principles -- **Coupled to React:** Kibana is a React application, and the minimum unit of sharing is the React component. Embeddables enforce this by requiring a React component during registration. -- **Composition over inheritence:** Rather than an inheritance-based system with classes, imperative APIs are plain old typescript objects that implement any number of shared interfaces. Interfaces are enforced via type guards and are shared via Packages. -- **Internal state management:** Each embeddable manages its own state. This is because the embeddable system allows a page to render a registry of embeddable types that can change over time. This makes it untenable for a single page to manage state for every type of embeddable. The page is only responsible for persisting and providing the last persisted state to the embeddable on startup. +#### Coupled to React +Kibana is a React application, and the minimum unit of sharing is the React component. Embeddables enforce this by requiring a React component during registration. -#### Best practices +#### Composition over inheritence +Rather than an inheritance-based system with classes, imperative APIs are plain old typescript objects that implement any number of shared interfaces. Interfaces are enforced via type guards and are shared via Packages. -- **Do not use Embeddables to share Components between plugins: ** Only create an embeddable if your Component is rendered on a page that persists embeddable state and renders multiple embeddable types. For example, create an embeddable to render your Component on a Dashboard. Otherwise, use a vanilla React Component to share Components between plugins. -- **Do not use Embeddables to avoid circular plugin dependencies: ** Break your Component into a Package or another plugin to avoid circular plugin dependencies. -- **Minimal API surface area: ** Embeddable APIs are accessable to all Kibana systems and all embeddable siblings and parents. Functions and state that are internal to an embeddable including any child components should not be added to the API. Consider passing internal state to child as props or react context. +#### Internal state management +Each embeddable manages its own state. This is because the embeddable system allows a page to render a registry of embeddable types that can change over time. This makes it untenable for a single page to manage state for every type of embeddable. The page is only responsible for persisting and providing the last persisted state to the embeddable on startup. -#### Examples +### Key concepts + +#### Publishing package +An embeddable API is a plain old typescript object that implements any number of shared interfaces. A shared interface is defined by a publishing package. A publishing package also provides a type guard that is used to check if a given object fulfills the interface. + +For example, the [has_edit_capabilites](https://github.com/elastic/kibana/tree/main/packages/presentation/presentation_publishing/interfaces/has_edit_capabilities.ts) publishing package defines the `HasEditCapabilities` interface and the `apiHasEditCapabilities` type guard. The [edit panal action](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_panel/public/panel_actions/edit_panel_action/edit_panel_action.ts) defines the "Edit" panel context menu action. The action's `isCompatible` check uses the `apiHasEditCapabilities` type guard to check that an embeddable API implements the `HasEditCapabilities` interface. When an embeddable API implements the interface and all other conditions of `isCompatible` check are true, the "Edit" action is availabe in the panel context menu. When an embeddable API does not implement the interface, the "Edit" action is not available in the panel context menu. + +#### Publishing subject +An embeddable API shares state via a publishing subject, a read only RxJS Observable. + +For example, [publishes_panel_title](https://github.com/elastic/kibana/tree/main/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts) publishing package defines interfaces and type guards for title state. [initializeTitles](https://github.com/elastic/kibana/tree/main/packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts) provides an implemenation for the titles publishing package. `panelTitle` is provided as a publishing subject. [PresentationPanelInternal React component](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_panel/public/panel_component/presentation_panel_internal.tsx) uses a hook to consume `panelTitle` as React state. Changes to `panelTitle` publishing subject updates React state, which in turn, causes the UI to re-render with the current value. [CustomizePanelEditor React component](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx) uses `api.setPanelTitle` to set the title on save. + +#### Comparators +Comparators allow a page to track changes to an embeddable's state. For example, Dashboard uses comparators to display a UI notification for unsaved changes, to reset changes, and persist unsaved changes to session storage. + +A comparator must be provided for each property in an embeddable's RuntimeState. A comparator is a 3 element tuple: where the first element is a publishing subject providing the current value. The second element is a setter allowing the page to reset the value. The third element is an optional comparator function which provides logic to diff this property. + +For example, [initializeTitles](https://github.com/elastic/kibana/tree/main/packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts) provides an implemenation for the titles publishing package. Comparitors are provided for each property from `SerializedTitles`. + +### Best practices + +#### Do not use Embeddables to share Components between plugins +Only create an embeddable if your Component is rendered on a page that persists embeddable state and renders multiple embeddable types. For example, create an embeddable to render your Component on a Dashboard. Otherwise, use a vanilla React Component to share Components between plugins. + +#### Do not use Embeddables to avoid circular plugin dependencies +Break your Component into a Package or another plugin to avoid circular plugin dependencies. + +#### Minimal API surface area +Embeddable APIs are accessable to all Kibana systems and all embeddable siblings and parents. Functions and state that are internal to an embeddable including any child components should not be added to the API. Consider passing internal state to child as props or react context. + +### Examples Examples available at [/examples/embeddable_examples](https://github.com/elastic/kibana/tree/main/examples/embeddable_examples) @@ -23,4 +52,4 @@ Examples available at [/examples/embeddable_examples](https://github.com/elastic - [Render an embeddable](https://github.com/elastic/kibana/blob/main/examples/embeddable_examples/public/react_embeddables/search/search_embeddable_renderer.tsx) Run examples with `yarn start --run-examples` -To access example embeddables, create a new dashboard, click "Add panel" and finally select "Embeddable examples". +To access example embeddables, create a new dashboard, click "Add panel" and finally select "Embeddable examples". \ No newline at end of file From bae84d4569870dcecfd0cef346d2e0d38ac92160 Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Tue, 21 May 2024 15:48:32 -0700 Subject: [PATCH 81/97] [Security AI Assistant] Marked assistant APIs as internal (#183965) Temporary moved Security AI Assistant APIs to internal. --- .../kbn-elastic-assistant-common/constants.ts | 6 ++--- ...ulk_crud_anonymization_fields_route.gen.ts | 2 +- ...rud_anonymization_fields_route.schema.yaml | 4 ++-- .../find_anonymization_fields_route.gen.ts | 2 +- ...ind_anonymization_fields_route.schema.yaml | 4 ++-- .../bulk_crud_conversations_route.gen.ts | 2 +- .../bulk_crud_conversations_route.schema.yaml | 4 ++-- .../crud_conversation_route.gen.ts | 2 +- .../crud_conversation_route.schema.yaml | 8 +++---- .../find_conversations_route.gen.ts | 2 +- .../find_conversations_route.schema.yaml | 6 ++--- .../prompts/bulk_crud_prompts_route.gen.ts | 2 +- .../bulk_crud_prompts_route.schema.yaml | 4 ++-- .../schemas/prompts/find_prompts_route.gen.ts | 2 +- .../prompts/find_prompts_route.schema.yaml | 4 ++-- .../bulk_update_anonymization_fields.test.ts | 6 ++--- .../bulk_update_anonymization_fields.ts | 2 +- .../use_fetch_anonymization_fields.test.tsx | 23 +++++++++++-------- .../use_fetch_anonymization_fields.ts | 4 ++-- .../bulk_update_actions_conversations.test.ts | 6 ++--- .../bulk_update_actions_conversations.ts | 2 +- .../api/conversations/conversations.test.tsx | 8 +++---- .../api/conversations/conversations.ts | 10 ++++---- ..._fetch_current_user_conversations.test.tsx | 4 ++-- .../use_fetch_current_user_conversations.ts | 4 ++-- .../use_settings_updater.test.tsx | 4 ++-- .../bulk_actions_route.ts | 4 ++-- .../routes/anonymization_fields/find_route.ts | 4 ++-- .../routes/prompts/bulk_actions_route.ts | 4 ++-- .../server/routes/prompts/find_route.ts | 4 ++-- .../append_conversation_messages_route.ts | 4 ++-- .../user_conversations/bulk_actions_route.ts | 4 ++-- .../routes/user_conversations/create_route.ts | 4 ++-- .../routes/user_conversations/delete_route.ts | 4 ++-- .../routes/user_conversations/find_route.ts | 4 ++-- .../routes/user_conversations/read_route.ts | 4 ++-- .../routes/user_conversations/update_route.ts | 4 ++-- .../public/assistant/provider.test.tsx | 4 ++-- 38 files changed, 89 insertions(+), 86 deletions(-) diff --git a/x-pack/packages/kbn-elastic-assistant-common/constants.ts b/x-pack/packages/kbn-elastic-assistant-common/constants.ts index bc8f4e3ab9db35..f30cb053d4ce18 100755 --- a/x-pack/packages/kbn-elastic-assistant-common/constants.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/constants.ts @@ -10,18 +10,18 @@ export const ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION = '1'; export const ELASTIC_AI_ASSISTANT_URL = '/api/elastic_assistant'; export const ELASTIC_AI_ASSISTANT_INTERNAL_URL = '/internal/elastic_assistant'; -export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL = `${ELASTIC_AI_ASSISTANT_URL}/current_user/conversations`; +export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL = `${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/current_user/conversations`; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID = `${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/{id}`; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID_MESSAGES = `${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID}/messages`; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION = `${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/_bulk_action`; export const ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND = `${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/_find`; -export const ELASTIC_AI_ASSISTANT_PROMPTS_URL = `${ELASTIC_AI_ASSISTANT_URL}/prompts`; +export const ELASTIC_AI_ASSISTANT_PROMPTS_URL = `${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/prompts`; export const ELASTIC_AI_ASSISTANT_PROMPTS_URL_BULK_ACTION = `${ELASTIC_AI_ASSISTANT_PROMPTS_URL}/_bulk_action`; export const ELASTIC_AI_ASSISTANT_PROMPTS_URL_FIND = `${ELASTIC_AI_ASSISTANT_PROMPTS_URL}/_find`; -export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL = `${ELASTIC_AI_ASSISTANT_URL}/anonymization_fields`; +export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL = `${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/anonymization_fields`; export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION = `${ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL}/_bulk_action`; export const ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_FIND = `${ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL}/_find`; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts index d25c0198aaa1ad..1fe37666b93e71 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Bulk Actions API endpoint - * version: 2023-10-31 + * version: 1 */ import { NonEmptyString } from '../common_attributes.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml index 663dafe7633033..9e2623966f129a 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Bulk Actions API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/anonymization_fields/_bulk_action: + /internal/elastic_assistant/anonymization_fields/_bulk_action: post: operationId: PerformBulkAction x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen.ts index a0c83a6594fad7..ce24ee0bb54e09 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen.ts @@ -14,7 +14,7 @@ import { ArrayFromString } from '@kbn/zod-helpers'; * * info: * title: Find AnonymizationFields API endpoint - * version: 2023-10-31 + * version: 1 */ import { AnonymizationFieldResponse } from './bulk_crud_anonymization_fields_route.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.schema.yaml index 4861d267ce5c84..b9b2d1e9e20978 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Find AnonymizationFields API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/anonymization_fields/_find: + /internal/elastic_assistant/anonymization_fields/_find: get: operationId: FindAnonymizationFields x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts index bb401150bbee04..1acde90ccebb39 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Bulk Actions API endpoint - * version: 2023-10-31 + * version: 1 */ import { diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.schema.yaml index 790f4e5e85d5e6..07685082057084 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Bulk Actions API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/conversations/_bulk_action: + /internal/elastic_assistant/conversations/_bulk_action: post: operationId: PerformBulkAction x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts index 58dc70f38789b7..072a04d944d340 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Create Conversation API endpoint - * version: 2023-10-31 + * version: 1 */ import { diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml index 1a4f490a202c7b..fc2f86e8a86543 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Create Conversation API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/conversations: + /internal/elastic_assistant/conversations: post: operationId: CreateConversation x-codegen-enabled: true @@ -38,7 +38,7 @@ paths: message: type: string - /api/elastic_assistant/conversations/{id}: + /internal/elastic_assistant/conversations/{id}: get: operationId: ReadConversation x-codegen-enabled: true @@ -148,7 +148,7 @@ paths: message: type: string - /api/elastic_assistant/conversations/{id}/messages: + /internal/elastic_assistant/conversations/{id}/messages: post: operationId: AppendConversationMessage x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts index 16743f77b3efd9..8f840c69adf307 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts @@ -14,7 +14,7 @@ import { ArrayFromString } from '@kbn/zod-helpers'; * * info: * title: Find Conversations API endpoint - * version: 2023-10-31 + * version: 1 */ import { ConversationResponse } from './common_attributes.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.schema.yaml index b44cebd1d3ec2f..44cec1a169e515 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Find Conversations API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/conversations/_find: + /internal/elastic_assistant/conversations/_find: get: operationId: FindConversations x-codegen-enabled: true @@ -91,7 +91,7 @@ paths: message: type: string - /api/elastic_assistant/conversations/current_user/_find: + /internal/elastic_assistant/conversations/current_user/_find: get: operationId: FindCurrentUserConversations x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts index 234b1157b5f718..123665bbb582fe 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Bulk Actions API endpoint - * version: 2023-10-31 + * version: 1 */ import { NonEmptyString, User } from '../common_attributes.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml index 355583ae866678..ede0136ba710a9 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Bulk Actions API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/prompts/_bulk_action: + /internal/elastic_assistant/prompts/_bulk_action: post: operationId: PerformBulkAction x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.gen.ts index 7400b11f25c7aa..2a7a87ecf1094e 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.gen.ts @@ -14,7 +14,7 @@ import { ArrayFromString } from '@kbn/zod-helpers'; * * info: * title: Find Prompts API endpoint - * version: 2023-10-31 + * version: 1 */ import { PromptResponse } from './bulk_crud_prompts_route.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.schema.yaml index b5d3b25ca20182..8e85194811dbc1 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/prompts/find_prompts_route.schema.yaml @@ -1,9 +1,9 @@ openapi: 3.0.0 info: title: Find Prompts API endpoint - version: '2023-10-31' + version: '1' paths: - /api/elastic_assistant/prompts/_find: + /internal/elastic_assistant/prompts/_find: get: operationId: FindPrompts x-codegen-enabled: true diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.test.ts index 88e9c0febba136..544c8c1606c3df 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.test.ts @@ -48,7 +48,7 @@ describe('bulkUpdateAnonymizationFields', () => { ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ create: [], update: [], @@ -71,7 +71,7 @@ describe('bulkUpdateAnonymizationFields', () => { ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ create: [anonymizationField1, anonymizationField2], update: [], @@ -93,7 +93,7 @@ describe('bulkUpdateAnonymizationFields', () => { ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ update: [anonymizationField1, anonymizationField2], delete: { ids: [] }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.ts index 9745e7ce386622..72d73cc2a5929f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/bulk_update_anonymization_fields.ts @@ -26,7 +26,7 @@ export const bulkUpdateAnonymizationFields = async ( ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify(anonymizationFieldsActions), } ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx index eefa9f3593f611..7c10597eaed872 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.test.tsx @@ -13,7 +13,7 @@ import React from 'react'; import { useFetchAnonymizationFields } from './use_fetch_anonymization_fields'; import { HttpSetup } from '@kbn/core-http-browser'; import { useAssistantContext } from '../../../assistant_context'; -import { defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; +import { API_VERSIONS, defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; const http = { fetch: jest.fn().mockResolvedValue(defaultAssistantFeatures), @@ -44,15 +44,18 @@ describe('useFetchAnonymizationFields', () => { await act(async () => { const { waitForNextUpdate } = renderHook(() => useFetchAnonymizationFields()); await waitForNextUpdate(); - expect(http.fetch).toHaveBeenCalledWith('/api/elastic_assistant/anonymization_fields/_find', { - method: 'GET', - query: { - page: 1, - per_page: 1000, - }, - version: '2023-10-31', - signal: undefined, - }); + expect(http.fetch).toHaveBeenCalledWith( + '/internal/elastic_assistant/anonymization_fields/_find', + { + method: 'GET', + query: { + page: 1, + per_page: 1000, + }, + version: API_VERSIONS.internal.v1, + signal: undefined, + } + ); expect(http.fetch).toHaveBeenCalled(); }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.ts index 657216b9079cd9..d2f07124f04b02 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields.ts @@ -36,7 +36,7 @@ export const CACHING_KEYS = [ ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_FIND, QUERY.page, QUERY.per_page, - API_VERSIONS.public.v1, + API_VERSIONS.internal.v1, ]; export const useFetchAnonymizationFields = (payload?: UseFetchAnonymizationFieldsParams) => { @@ -50,7 +50,7 @@ export const useFetchAnonymizationFields = (payload?: UseFetchAnonymizationField async () => http.fetch(ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_FIND, { method: 'GET', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, query: QUERY, signal: payload?.signal, }), diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.test.ts index 99cea460fe7d29..a770b90e7881fb 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.test.ts @@ -63,7 +63,7 @@ describe('bulkUpdateConversations', () => { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ update: [], create: [], @@ -89,7 +89,7 @@ describe('bulkUpdateConversations', () => { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ update: [], create: [conversation1, conversation2], @@ -114,7 +114,7 @@ describe('bulkUpdateConversations', () => { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ update: [conversation1, conversation2], delete: { ids: [] }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.ts index 71ebdf50c251d7..c22095665a2297 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/bulk_update_actions_conversations.ts @@ -114,7 +114,7 @@ export const bulkUpdateConversations = async ( ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION, { method: 'POST', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, body: JSON.stringify({ update: conversationsToUpdate, create: conversationsToCreate, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.test.tsx index 0edb5e0f4a1589..5f7d7cefaf450b 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.test.tsx @@ -36,11 +36,11 @@ describe('conversations api', () => { await waitForNextUpdate(); expect(deleteProps.http.fetch).toHaveBeenCalledWith( - '/api/elastic_assistant/current_user/conversations/test', + '/internal/elastic_assistant/current_user/conversations/test', { method: 'DELETE', signal: undefined, - version: '2023-10-31', + version: '1', } ); expect(toasts.addError).not.toHaveBeenCalled(); @@ -62,11 +62,11 @@ describe('conversations api', () => { await waitForNextUpdate(); expect(getProps.http.fetch).toHaveBeenCalledWith( - '/api/elastic_assistant/current_user/conversations/test', + '/internal/elastic_assistant/current_user/conversations/test', { method: 'GET', signal: undefined, - version: '2023-10-31', + version: '1', } ); expect(toasts.addError).not.toHaveBeenCalled(); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.ts index 54bac7e563acc5..e6c6b2925f3371 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/conversations.ts @@ -44,7 +44,7 @@ export const getConversationById = async ({ try { const response = await http.fetch(`${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/${id}`, { method: 'GET', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, signal, }); @@ -84,7 +84,7 @@ export const getUserConversations = async ({ ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND, { method: 'GET', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, signal, } ); @@ -125,7 +125,7 @@ export const createConversation = async ({ try { const response = await http.post(ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL, { body: JSON.stringify(conversation), - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, signal, }); @@ -168,7 +168,7 @@ export const deleteConversation = async ({ try { const response = await http.fetch(`${ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL}/${id}`, { method: 'DELETE', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, signal, }); @@ -237,7 +237,7 @@ export const updateConversation = async ({ headers: { 'Content-Type': 'application/json', }, - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, signal, } ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx index 22023179ad5dea..2c6ed953b56f33 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.test.tsx @@ -47,14 +47,14 @@ describe('useFetchCurrentUserConversations', () => { ); await waitForNextUpdate(); expect(defaultProps.http.fetch).toHaveBeenCalledWith( - '/api/elastic_assistant/current_user/conversations/_find', + '/internal/elastic_assistant/current_user/conversations/_find', { method: 'GET', query: { page: 1, perPage: 100, }, - version: '2023-10-31', + version: '1', signal: undefined, } ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.ts index 68612e3e223978..58be08317d40cb 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_fetch_current_user_conversations.ts @@ -47,7 +47,7 @@ export const CONVERSATIONS_QUERY_KEYS = [ ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND, query.page, query.perPage, - API_VERSIONS.public.v1, + API_VERSIONS.internal.v1, ]; export const useFetchCurrentUserConversations = ({ @@ -62,7 +62,7 @@ export const useFetchCurrentUserConversations = ({ async () => http.fetch(ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND, { method: 'GET', - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, query, signal, }), diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx index 73e9c8ddf34922..08e9fb434b051f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx @@ -171,10 +171,10 @@ describe('useSettingsUpdater', () => { await result.current.saveSettings(); expect(mockHttp.fetch).toHaveBeenCalledWith( - '/api/elastic_assistant/current_user/conversations/_bulk_action', + '/internal/elastic_assistant/current_user/conversations/_bulk_action', { method: 'POST', - version: '2023-10-31', + version: '1', body: '{"delete":{"ids":["1"]}}', } ); diff --git a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.ts b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.ts index 94788d2d1d9260..47213cb0d278eb 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.ts @@ -118,7 +118,7 @@ export const bulkActionAnonymizationFieldsRoute = ( ) => { router.versioned .post({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_BULK_ACTION, options: { tags: ['access:securitySolution-updateAIAssistantAnonymization'], @@ -129,7 +129,7 @@ export const bulkActionAnonymizationFieldsRoute = ( }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(PerformBulkActionRequestBody), diff --git a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/find_route.ts b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/find_route.ts index 904a80d6a3ea4f..c0383b1b3b38c4 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/find_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/find_route.ts @@ -30,7 +30,7 @@ export const findAnonymizationFieldsRoute = ( ) => { router.versioned .get({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL_FIND, options: { tags: ['access:elasticAssistant'], @@ -38,7 +38,7 @@ export const findAnonymizationFieldsRoute = ( }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { query: buildRouteValidationWithZod(FindAnonymizationFieldsRequestQuery), diff --git a/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.ts b/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.ts index d90b01b78cfa70..cfcd6d8cc05d68 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.ts @@ -112,7 +112,7 @@ const buildBulkResponse = ( export const bulkPromptsRoute = (router: ElasticAssistantPluginRouter, logger: Logger) => { router.versioned .post({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_PROMPTS_URL_BULK_ACTION, options: { tags: ['access:elasticAssistant'], @@ -123,7 +123,7 @@ export const bulkPromptsRoute = (router: ElasticAssistantPluginRouter, logger: L }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(PerformBulkActionRequestBody), diff --git a/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts b/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts index f0f198b54eaf37..df2ec323bc3569 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts @@ -23,7 +23,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const findPromptsRoute = (router: ElasticAssistantPluginRouter, logger: Logger) => { router.versioned .get({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_PROMPTS_URL_FIND, options: { tags: ['access:elasticAssistant'], @@ -31,7 +31,7 @@ export const findPromptsRoute = (router: ElasticAssistantPluginRouter, logger: L }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { query: buildRouteValidationWithZod(FindPromptsRequestQuery), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.ts index dad21069e84c00..796c0d617fe5de 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.ts @@ -22,7 +22,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const appendConversationMessageRoute = (router: ElasticAssistantPluginRouter) => { router.versioned .post({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID_MESSAGES, options: { tags: ['access:elasticAssistant'], @@ -30,7 +30,7 @@ export const appendConversationMessageRoute = (router: ElasticAssistantPluginRou }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(AppendConversationMessageRequestBody), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.ts index fafa5d6cc6e0e7..0b410612651211 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.ts @@ -116,7 +116,7 @@ export const bulkActionConversationsRoute = ( ) => { router.versioned .post({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BULK_ACTION, options: { tags: ['access:elasticAssistant'], @@ -127,7 +127,7 @@ export const bulkActionConversationsRoute = ( }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(PerformBulkActionRequestBody), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.ts index 281775cfb4e15b..e66c83f77510de 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.ts @@ -21,7 +21,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const createConversationRoute = (router: ElasticAssistantPluginRouter): void => { router.versioned .post({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL, options: { @@ -30,7 +30,7 @@ export const createConversationRoute = (router: ElasticAssistantPluginRouter): v }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(ConversationCreateProps), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.ts index 5d761c09f682c8..b39f898eaeaa1d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.ts @@ -19,7 +19,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const deleteConversationRoute = (router: ElasticAssistantPluginRouter) => { router.versioned .delete({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID, options: { tags: ['access:elasticAssistant'], @@ -27,7 +27,7 @@ export const deleteConversationRoute = (router: ElasticAssistantPluginRouter) => }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { params: buildRouteValidationWithZod(DeleteConversationRequestParams), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/find_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/find_route.ts index 6eda3e37645c5b..8db36466c9bad2 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/find_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/find_route.ts @@ -26,7 +26,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const findUserConversationsRoute = (router: ElasticAssistantPluginRouter) => { router.versioned .get({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND, options: { tags: ['access:elasticAssistant'], @@ -34,7 +34,7 @@ export const findUserConversationsRoute = (router: ElasticAssistantPluginRouter) }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { query: buildRouteValidationWithZod(FindConversationsRequestQuery), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.ts index dd540897b0eced..12020d7fa51d9f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.ts @@ -21,7 +21,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const readConversationRoute = (router: ElasticAssistantPluginRouter) => { router.versioned .get({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID, options: { tags: ['access:elasticAssistant'], @@ -29,7 +29,7 @@ export const readConversationRoute = (router: ElasticAssistantPluginRouter) => { }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { params: buildRouteValidationWithZod(ReadConversationRequestParams), diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts index 213ea1e20a9ffa..4a7fd5a9d67cb0 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts @@ -24,7 +24,7 @@ import { UPGRADE_LICENSE_MESSAGE, hasAIAssistantLicense } from '../helpers'; export const updateConversationRoute = (router: ElasticAssistantPluginRouter) => { router.versioned .put({ - access: 'public', + access: 'internal', path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID, options: { tags: ['access:elasticAssistant'], @@ -32,7 +32,7 @@ export const updateConversationRoute = (router: ElasticAssistantPluginRouter) => }) .addVersion( { - version: API_VERSIONS.public.v1, + version: API_VERSIONS.internal.v1, validate: { request: { body: buildRouteValidationWithZod(ConversationUpdateProps), diff --git a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx index 9ee276181b65e3..3667e077a50c12 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx @@ -165,7 +165,7 @@ describe('createConversations', () => { ); await waitForNextUpdate(); expect(http.fetch.mock.calls[0][0]).toBe( - '/api/elastic_assistant/current_user/conversations/_bulk_action' + '/internal/elastic_assistant/current_user/conversations/_bulk_action' ); expect( http.fetch.mock.calls[0].length > 1 @@ -187,7 +187,7 @@ describe('createConversations', () => { ); await waitForNextUpdate(); expect(http.fetch.mock.calls[0][0]).toBe( - '/api/elastic_assistant/current_user/conversations/_bulk_action' + '/internal/elastic_assistant/current_user/conversations/_bulk_action' ); const createdConversations = http.fetch.mock.calls[0].length > 1 From 9ef9a8481bc6572b9fd70303065c099008d3d670 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 21 May 2024 18:57:37 -0500 Subject: [PATCH 82/97] Add workflow to trigger alert on failed test (#183741) --- .github/workflows/alert-failed-test.yml | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/alert-failed-test.yml diff --git a/.github/workflows/alert-failed-test.yml b/.github/workflows/alert-failed-test.yml new file mode 100644 index 00000000000000..03d46cb65fcfd9 --- /dev/null +++ b/.github/workflows/alert-failed-test.yml @@ -0,0 +1,28 @@ +on: + issue_comment: + types: [created] + +jobs: + issue_alert: + name: Alert on failed test + if: | + !github.event.issue.pull_request + && github.event.comment.user.login == 'kibanamachine' + runs-on: ubuntu-latest + steps: + - name: Checkout kibana-operations + uses: actions/checkout@v4 + with: + repository: 'elastic/kibana-operations' + ref: main + path: ./kibana-operations + token: ${{secrets.KIBANAMACHINE_TOKEN}} + + - name: Label failed test issue + working-directory: ./kibana-operations/triage + env: + GITHUB_TOKEN: ${{secrets.KIBANAMACHINE_TOKEN}} + SLACK_TOKEN: ${{secrets.SLACK_TOKEN_FAILED_TEST_NOTIFIER}} + run: | + npm ci --omit=dev + node failed-test-alert ${{github.event.issue.number}} || true From 14507695ee129e241a4423abf3dfa681bdc4c5c2 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 21 May 2024 18:13:55 -0600 Subject: [PATCH 83/97] [canvas] Canvas parent API should implement HasDisableTriggers interface (#183949) React embeddables should get `disableTriggers` state from parent API, not serialized state. PR updates canvas parent API to implement HasDisableTriggers interface. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../presentation/presentation_publishing/index.ts | 6 +++++- .../interfaces/has_disable_triggers.ts | 13 +++++++++++++ .../renderers/embeddable/embeddable.tsx | 14 ++++++-------- .../public/components/hooks/use_canvas_api.tsx | 1 + x-pack/plugins/canvas/types/embeddables.ts | 3 ++- .../trigger_actions/filter_by_map_extent/action.ts | 9 +++++++-- 6 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/presentation/presentation_publishing/index.ts b/packages/presentation/presentation_publishing/index.ts index 5159a0b7d3b522..7a940bc46806f3 100644 --- a/packages/presentation/presentation_publishing/index.ts +++ b/packages/presentation/presentation_publishing/index.ts @@ -48,7 +48,11 @@ export { type HasAppContext, type EmbeddableAppContext, } from './interfaces/has_app_context'; -export { apiHasDisableTriggers, type HasDisableTriggers } from './interfaces/has_disable_triggers'; +export { + apiHasDisableTriggers, + areTriggersDisabled, + type HasDisableTriggers, +} from './interfaces/has_disable_triggers'; export { hasEditCapabilities, type HasEditCapabilities } from './interfaces/has_edit_capabilities'; export { apiHasExecutionContext, diff --git a/packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts b/packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts index 00066be3967fa0..a4233faf2aab80 100644 --- a/packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts +++ b/packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts @@ -6,6 +6,8 @@ * Side Public License, v 1. */ +import { apiHasParentApi } from './has_parent_api'; + export interface HasDisableTriggers { disableTriggers: boolean; } @@ -13,3 +15,14 @@ export interface HasDisableTriggers { export const apiHasDisableTriggers = (api: unknown | null): api is HasDisableTriggers => { return Boolean(api && typeof (api as HasDisableTriggers).disableTriggers === 'boolean'); }; + +export function areTriggersDisabled(api?: unknown) { + function getDisabledTriggers(thisApi?: unknown) { + return apiHasDisableTriggers(thisApi) ? thisApi.disableTriggers : false; + } + + return ( + getDisabledTriggers(api) || + getDisabledTriggers(apiHasParentApi(api) ? api.parentApi : undefined) + ); +} diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index f275cdfceff3e6..94fcf2a44044f0 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -15,8 +15,9 @@ import { ReactEmbeddableRenderer, } from '@kbn/embeddable-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import React, { FC, useMemo } from 'react'; +import React, { FC } from 'react'; import ReactDOM from 'react-dom'; +import { omit } from 'lodash'; import { pluginServices } from '../../../public/services'; import { CANVAS_EMBEDDABLE_CLASSNAME } from '../../../common/lib'; import { RendererStrings } from '../../../i18n'; @@ -54,21 +55,18 @@ const renderReactEmbeddable = ({ core: CoreStart; }) => { // wrap in functional component to allow usage of hooks - const RendererWrapper: FC<{ canvasApi: CanvasContainerApi }> = ({ canvasApi }) => { + const RendererWrapper: FC<{}> = () => { const getAppContext = useGetAppContext(core); - useMemo(() => { - canvasApi.getAppContext = getAppContext; - }, [canvasApi, getAppContext]); - return ( ({ ...container, + getAppContext, getSerializedStateForChild: () => ({ - rawState: input, + rawState: omit(input, 'disableTriggers'), }), })} key={`${type}_${uuid}`} @@ -91,7 +89,7 @@ const renderReactEmbeddable = ({ className={CANVAS_EMBEDDABLE_CLASSNAME} style={{ width: '100%', height: '100%', cursor: 'auto' }} > - + ); diff --git a/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx b/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx index fe37862f8f3d81..3d1784bf65c82d 100644 --- a/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx +++ b/x-pack/plugins/canvas/public/components/hooks/use_canvas_api.tsx @@ -48,6 +48,7 @@ export const useCanvasApi: () => CanvasContainerApi = () => { }) => { createNewEmbeddable(panelType, initialState); }, + disableTriggers: true, /** * getSerializedStateForChild is left out here because we cannot access the state here. That method * is injected in `x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx` diff --git a/x-pack/plugins/canvas/types/embeddables.ts b/x-pack/plugins/canvas/types/embeddables.ts index ac574b2fce460e..eaf206b05c47a6 100644 --- a/x-pack/plugins/canvas/types/embeddables.ts +++ b/x-pack/plugins/canvas/types/embeddables.ts @@ -8,7 +8,7 @@ import type { TimeRange } from '@kbn/es-query'; import { Filter } from '@kbn/es-query'; import { EmbeddableInput as Input } from '@kbn/embeddable-plugin/common'; -import { HasAppContext, PublishesViewMode } from '@kbn/presentation-publishing'; +import { HasAppContext, HasDisableTriggers, PublishesViewMode } from '@kbn/presentation-publishing'; import { CanAddNewPanel, HasSerializedChildState } from '@kbn/presentation-containers'; export type EmbeddableInput = Input & { @@ -19,5 +19,6 @@ export type EmbeddableInput = Input & { export type CanvasContainerApi = PublishesViewMode & CanAddNewPanel & + HasDisableTriggers & HasSerializedChildState & Partial; diff --git a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent/action.ts b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent/action.ts index a368dc65b26fe9..f0a55a20229cbc 100644 --- a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent/action.ts +++ b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent/action.ts @@ -6,7 +6,12 @@ */ import { i18n } from '@kbn/i18n'; -import { type EmbeddableApiContext, apiHasType, apiIsOfType } from '@kbn/presentation-publishing'; +import { + type EmbeddableApiContext, + apiHasType, + apiIsOfType, + areTriggersDisabled, +} from '@kbn/presentation-publishing'; import { createAction } from '@kbn/ui-actions-plugin/public'; import { apiHasVisualizeConfig } from '@kbn/visualizations-plugin/public'; import { type FilterByMapExtentActionApi } from './types'; @@ -53,7 +58,7 @@ export const filterByMapExtentAction = createAction({ return 'filter'; }, isCompatible: async ({ embeddable }: EmbeddableApiContext) => { - if (!isApiCompatible(embeddable) || embeddable.disableTriggers) return false; + if (!isApiCompatible(embeddable) || areTriggersDisabled(embeddable)) return false; return ( apiIsOfType(embeddable, MAP_SAVED_OBJECT_TYPE) || (apiHasVisualizeConfig(embeddable) && isLegacyMapApi(embeddable)) From fc64c1161f95b47c1c8d1d7d8ca7648da9141b5f Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 21 May 2024 21:45:07 -0400 Subject: [PATCH 84/97] skip failing test suite (#183860) --- .../apps/integrations_feature_flag/artifact_entries_list.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_endpoint/apps/integrations_feature_flag/artifact_entries_list.ts b/x-pack/test/security_solution_endpoint/apps/integrations_feature_flag/artifact_entries_list.ts index 46e333e10779dc..cd5c5694c33a80 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations_feature_flag/artifact_entries_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations_feature_flag/artifact_entries_list.ts @@ -52,7 +52,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { .set('kbn-xsrf', 'true'); }; - describe('For each artifact list under management', function () { + // Failing: See https://github.com/elastic/kibana/issues/183860 + describe.skip('For each artifact list under management', function () { targetTags(this, ['@ess', '@serverless']); this.timeout(60_000 * 5); From 40c6b2b46b80d7326e4f78716ffad853c67c484b Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 May 2024 02:58:52 +0100 Subject: [PATCH 85/97] skip flaky suite (#183925) --- x-pack/test/functional/apps/rollup_job/rollup_jobs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js index 1b2ba0457e02b0..ba8ff5368c13a4 100644 --- a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js +++ b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js @@ -23,7 +23,8 @@ export default function ({ getService, getPageObjects }) { remoteEs = getService('remoteEs'); } - describe('rollup job', function () { + // FLAKY: https://github.com/elastic/kibana/issues/183925 + describe.skip('rollup job', function () { // Since rollups can only be created once with the same name (even if you delete it), // we add the Date.now() to avoid name collision. const rollupJobName = 'rollup-to-be-' + Date.now(); From 7a50cf7b993cdcca3703c10611e401cabc92f300 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 May 2024 03:03:34 +0100 Subject: [PATCH 86/97] skip flaky suite (#183926) --- x-pack/test/functional/apps/rollup_job/rollup_jobs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js index ba8ff5368c13a4..c6feed1c5bf1a1 100644 --- a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js +++ b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js @@ -24,6 +24,7 @@ export default function ({ getService, getPageObjects }) { } // FLAKY: https://github.com/elastic/kibana/issues/183925 + // FLAKY: https://github.com/elastic/kibana/issues/183926 describe.skip('rollup job', function () { // Since rollups can only be created once with the same name (even if you delete it), // we add the Date.now() to avoid name collision. From 98405176e0593c743ec934920e90d9069122ec52 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 May 2024 03:07:08 +0100 Subject: [PATCH 87/97] skip flaky suite (#183928) --- x-pack/test/functional/apps/rollup_job/rollup_jobs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js index c6feed1c5bf1a1..979443a125a7af 100644 --- a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js +++ b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js @@ -25,6 +25,7 @@ export default function ({ getService, getPageObjects }) { // FLAKY: https://github.com/elastic/kibana/issues/183925 // FLAKY: https://github.com/elastic/kibana/issues/183926 + // FLAKY: https://github.com/elastic/kibana/issues/183928 describe.skip('rollup job', function () { // Since rollups can only be created once with the same name (even if you delete it), // we add the Date.now() to avoid name collision. From af605ae211c6ec4375acdf690d19364eb140e3c5 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 May 2024 03:08:25 +0100 Subject: [PATCH 88/97] skip flaky suite (#183927) --- x-pack/test/functional/apps/rollup_job/rollup_jobs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js index 979443a125a7af..41b864d65300b8 100644 --- a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js +++ b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js @@ -25,6 +25,7 @@ export default function ({ getService, getPageObjects }) { // FLAKY: https://github.com/elastic/kibana/issues/183925 // FLAKY: https://github.com/elastic/kibana/issues/183926 + // FLAKY: https://github.com/elastic/kibana/issues/183927 // FLAKY: https://github.com/elastic/kibana/issues/183928 describe.skip('rollup job', function () { // Since rollups can only be created once with the same name (even if you delete it), From 2c1c854bf456be6995eabfea5ab607471ccce338 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 May 2024 03:11:00 +0100 Subject: [PATCH 89/97] skip flaky suite (#104569) --- x-pack/test/functional/apps/rollup_job/rollup_jobs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js index 41b864d65300b8..3c33c9c31bc6bd 100644 --- a/x-pack/test/functional/apps/rollup_job/rollup_jobs.js +++ b/x-pack/test/functional/apps/rollup_job/rollup_jobs.js @@ -27,6 +27,7 @@ export default function ({ getService, getPageObjects }) { // FLAKY: https://github.com/elastic/kibana/issues/183926 // FLAKY: https://github.com/elastic/kibana/issues/183927 // FLAKY: https://github.com/elastic/kibana/issues/183928 + // FLAKY: https://github.com/elastic/kibana/issues/104569 describe.skip('rollup job', function () { // Since rollups can only be created once with the same name (even if you delete it), // we add the Date.now() to avoid name collision. From e79fac1e9093369bd6acb548c52d9c74db22475d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 22 May 2024 01:12:54 -0400 Subject: [PATCH 90/97] [api-docs] 2024-05-22 Daily api_docs build (#183978) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/714 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.devdocs.json | 318 +++---------- api_docs/embeddable.mdx | 4 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 14 + 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/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.devdocs.json | 12 + api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 46 ++ api_docs/kbn_core_http_server.mdx | 4 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ..._objects_base_server_internal.devdocs.json | 4 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.devdocs.json | 230 +++++++-- api_docs/kbn_es_query.mdx | 4 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- .../kbn_presentation_containers.devdocs.json | 443 +++++++++++------- api_docs/kbn_presentation_containers.mdx | 4 +- .../kbn_presentation_publishing.devdocs.json | 381 +++++++++++---- api_docs/kbn_presentation_publishing.mdx | 4 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.devdocs.json | 66 ++- api_docs/kbn_reporting_server.mdx | 4 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.devdocs.json | 8 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.devdocs.json | 132 +++--- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- ...n_visualization_ui_components.devdocs.json | 8 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 18 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 707 files changed, 1765 insertions(+), 1317 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 493c0cd4a1d399..3ba234b98bbcb8 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-05-21 +date: 2024-05-22 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 2b08b8f1d96684..8336441b9f9afd 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index d34fbace90d10c..6685b071320f1d 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index b5be478a5bd8b8..1a335060d4c1b1 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-05-21 +date: 2024-05-22 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 bc94f0a8c9296d..fe1caf5bed1bb0 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 6931292f8d133f..84ad7ebed719ea 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -144,7 +144,7 @@ "section": "def-common.NonEmptyStringBrand", "text": "NonEmptyStringBrand" }, - ">; }; })>; }" + ">; } & { kuery?: string | undefined; rangeFrom?: string | undefined; rangeTo?: string | undefined; }; })>; }" ], "path": "x-pack/plugins/observability_solution/apm/public/plugin.ts", "deprecated": false, diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 624abe5f51a000..765707f5728882 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index e4f1826bd6e79f..2a57372e374793 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index cfd7c5a5350cea..c85c92d8cc2792 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 50af728439c5e9..986740b48784db 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index b40d5bf144f5d5..931af986b51433 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-05-21 +date: 2024-05-22 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 d196abe7007e0a..3a1fcdb56c0d4b 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-05-21 +date: 2024-05-22 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 0c5c8d17d4c7ff..6cee45110a267a 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-05-21 +date: 2024-05-22 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 d5a1d12f353fd7..83ea6810a8a8ec 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-05-21 +date: 2024-05-22 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 debf6ad62db827..0374ab0494cc80 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-05-21 +date: 2024-05-22 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 ca37a9d2cd0cdd..6b9217bd04591c 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index f69b4e3ef89e26..6745793c454e48 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-05-21 +date: 2024-05-22 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 5c5f142213aa2b..5a2b7696074f72 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-05-21 +date: 2024-05-22 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 5fe6e545b60df8..f46a01bc6c79b2 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-05-21 +date: 2024-05-22 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 cbfefb9e0f06e1..0dbe0774fb1b5d 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-05-21 +date: 2024-05-22 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 8b42d370625fb6..8c0c47f1336d32 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-05-21 +date: 2024-05-22 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 3cb7c10ef9cf3a..59b293bd5ec6a3 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 73f8d134dd24f4..609d39dd795470 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-05-21 +date: 2024-05-22 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 98cb6791538046..1abe7d23506b49 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-05-21 +date: 2024-05-22 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 56721a63df6106..d081fe81ca4808 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-05-21 +date: 2024-05-22 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 0508847662fe27..9d269b4688230a 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-05-21 +date: 2024-05-22 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 2eee2878302321..4b2df0a95ff640 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-05-21 +date: 2024-05-22 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 25b786dc3e132b..eb502463b92f88 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-05-21 +date: 2024-05-22 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 d13b29c37c66ed..e442ef8638e719 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-05-21 +date: 2024-05-22 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 2c0ded36b5ef5c..c5ea0b034a4292 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-05-21 +date: 2024-05-22 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 36bea2d273a687..259ff61fdab8d2 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-05-21 +date: 2024-05-22 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 e31a93de692afe..ade400cbafe2c2 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 764cabf1a84641..89f51b914ebafe 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-05-21 +date: 2024-05-22 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 19861a85c21172..ee20462caa5039 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 4a70997bf3f425..f9b500c0537a8f 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 6ff52b7f2d9ebd..f9d6ff0d62153b 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a7eff036be5c09..c9a6228b657e61 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 246f46bbd55931..499661402ab006 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 216c269ca32dd9..796e4ba0bad3b8 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-05-21 +date: 2024-05-22 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 6ccef85bc389c5..05fdd004390540 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-05-21 +date: 2024-05-22 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 e99b8dd51c4c93..239c249d26bf06 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index a43cb711ef34c8..0418f3237d1fcb 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index b646fa67ec3bdb..369a51bfc97210 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 38ba832b6a27dd..4bc8321f968482 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 24e5f07f0453ae..1322b23c1e5daa 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -443,37 +443,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "embeddable", - "id": "def-public.Container.lastSavedState", - "type": "Object", - "tags": [], - "label": "lastSavedState", - "description": [], - "signature": [ - "Subject", - "" - ], - "path": "src/plugins/embeddable/public/lib/containers/container.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "embeddable", - "id": "def-public.Container.getLastSavedStateForChild", - "type": "Function", - "tags": [], - "label": "getLastSavedStateForChild", - "description": [], - "signature": [ - "() => undefined" - ], - "path": "src/plugins/embeddable/public/lib/containers/container.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, { "parentPluginId": "embeddable", "id": "def-public.Container.Unnamed", @@ -8929,7 +8898,7 @@ "\nRenders a component from the React Embeddable registry into a Presentation Panel.\n\nTODO: Rename this to simply `Embeddable` when the legacy Embeddable system is removed." ], "signature": [ - " = ", + " = ", { "pluginId": "embeddable", "scope": "public", @@ -8945,15 +8914,23 @@ "section": "def-public.DefaultEmbeddableApi", "text": "DefaultEmbeddableApi" }, - ">({ maybeId, type, state, parentApi, onApiAvailable, panelProps, onAnyStateChange, hidePanelChrome, }: { maybeId?: string | undefined; type: string; state: ", + ", RuntimeState extends object = SerializedState, ParentApi extends ", { "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" + "section": "def-common.HasSerializedChildState", + "text": "HasSerializedChildState" }, - "; parentApi?: unknown; onApiAvailable?: ((api: ApiType) => void) | undefined; panelProps?: Pick<", + " = ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.HasSerializedChildState", + "text": "HasSerializedChildState" + }, + ">({ type, maybeId, getParentApi, panelProps, onAnyStateChange, onApiAvailable, hidePanelChrome, }: { type: string; maybeId?: string | undefined; getParentApi: () => ParentApi; onApiAvailable?: ((api: Api) => void) | undefined; panelProps?: Pick<", { "pluginId": "presentationPanel", "scope": "public", @@ -8961,7 +8938,7 @@ "section": "def-public.PresentationPanelProps", "text": "PresentationPanelProps" }, - ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined; hidePanelChrome?: boolean | undefined; onAnyStateChange?: ((state: ", + ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined; hidePanelChrome?: boolean | undefined; onAnyStateChange?: ((state: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -8969,7 +8946,7 @@ "section": "def-common.SerializedPanelState", "text": "SerializedPanelState" }, - ") => void) | undefined; }) => JSX.Element" + ") => void) | undefined; }) => JSX.Element" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -8980,26 +8957,12 @@ "id": "def-public.ReactEmbeddableRenderer.$1", "type": "Object", "tags": [], - "label": "{\n maybeId,\n type,\n state,\n parentApi,\n onApiAvailable,\n panelProps,\n onAnyStateChange,\n hidePanelChrome,\n}", + "label": "{\n type,\n maybeId,\n getParentApi,\n panelProps,\n onAnyStateChange,\n onApiAvailable,\n hidePanelChrome,\n}", "description": [], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableRenderer.$1.maybeId", - "type": "string", - "tags": [], - "label": "maybeId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "embeddable", "id": "def-public.ReactEmbeddableRenderer.$1.type", @@ -9013,20 +8976,13 @@ }, { "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableRenderer.$1.state", - "type": "Object", + "id": "def-public.ReactEmbeddableRenderer.$1.maybeId", + "type": "string", "tags": [], - "label": "state", + "label": "maybeId", "description": [], "signature": [ - { - "pluginId": "@kbn/presentation-containers", - "scope": "common", - "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - "" + "string | undefined" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9034,17 +8990,19 @@ }, { "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableRenderer.$1.parentApi", - "type": "Unknown", + "id": "def-public.ReactEmbeddableRenderer.$1.getParentApi", + "type": "Function", "tags": [], - "label": "parentApi", + "label": "getParentApi", "description": [], "signature": [ - "unknown" + "() => ParentApi" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [], + "returnComment": [] }, { "parentPluginId": "embeddable", @@ -9054,7 +9012,7 @@ "label": "onApiAvailable", "description": [], "signature": [ - "((api: ApiType) => void) | undefined" + "((api: Api) => void) | undefined" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9068,7 +9026,7 @@ "label": "api", "description": [], "signature": [ - "ApiType" + "Api" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9094,7 +9052,7 @@ "section": "def-public.PresentationPanelProps", "text": "PresentationPanelProps" }, - ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined" + ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9132,7 +9090,7 @@ "section": "def-common.SerializedPanelState", "text": "SerializedPanelState" }, - ") => void) | undefined" + ") => void) | undefined" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9153,7 +9111,7 @@ "section": "def-common.SerializedPanelState", "text": "SerializedPanelState" }, - "" + "" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, @@ -9349,119 +9307,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "embeddable", - "id": "def-public.startTrackingEmbeddableUnsavedChanges", - "type": "Function", - "tags": [], - "label": "startTrackingEmbeddableUnsavedChanges", - "description": [], - "signature": [ - "(uuid: string, parentApi: unknown, comparators: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "common", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.StateComparators", - "text": "StateComparators" - }, - ", deserializeState: (state: ", - { - "pluginId": "@kbn/presentation-containers", - "scope": "common", - "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - ") => RuntimeState) => { unsavedChanges: ", - "BehaviorSubject", - "; resetUnsavedChanges: () => void; cleanup: () => void; } | { unsavedChanges: ", - "BehaviorSubject", - " | undefined>; resetUnsavedChanges: () => void; cleanup: () => void; }" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.startTrackingEmbeddableUnsavedChanges.$1", - "type": "string", - "tags": [], - "label": "uuid", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "embeddable", - "id": "def-public.startTrackingEmbeddableUnsavedChanges.$2", - "type": "Unknown", - "tags": [], - "label": "parentApi", - "description": [], - "signature": [ - "unknown" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "embeddable", - "id": "def-public.startTrackingEmbeddableUnsavedChanges.$3", - "type": "Object", - "tags": [], - "label": "comparators", - "description": [], - "signature": [ - { - "pluginId": "@kbn/presentation-publishing", - "scope": "common", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.StateComparators", - "text": "StateComparators" - }, - "" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "embeddable", - "id": "def-public.startTrackingEmbeddableUnsavedChanges.$4", - "type": "Function", - "tags": [], - "label": "deserializeState", - "description": [], - "signature": [ - "(state: ", - { - "pluginId": "@kbn/presentation-containers", - "scope": "common", - "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - ") => RuntimeState" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "embeddable", "id": "def-public.useEmbeddableFactory", @@ -9774,7 +9619,7 @@ "section": "def-public.DefaultEmbeddableApi", "text": "DefaultEmbeddableApi" }, - " extends ", + " extends ", "DefaultPresentationPanelApi", ",", { @@ -9800,7 +9645,15 @@ "section": "def-common.HasSerializableState", "text": "HasSerializableState" }, - "" + ",", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.HasSnapshottableState", + "text": "HasSnapshottableState" + }, + "" ], "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", "deprecated": false, @@ -12887,7 +12740,7 @@ "section": "def-public.ReactEmbeddableFactory", "text": "ReactEmbeddableFactory" }, - "" + "" ], "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", "deprecated": false, @@ -12913,10 +12766,10 @@ "tags": [], "label": "deserializeState", "description": [ - "\nA required synchronous function that transforms serialized state into runtime state.\nThis will be used twice - once for the parent state, and once for the last saved state\nfor comparison.\n\nThis can also be used to:\n\n- Inject references provided by the parent\n- Migrate the state to a newer version (this must be undone when serializing)" + "\nA required asynchronous function that transforms serialized state into runtime state.\n\nThis could be used to:\n- Load state from some external store\n- Inject references provided by the parent\n- Migrate the state to a newer version (this must be undone when serializing)" ], "signature": [ - "(state: ", + "(panelState: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -12924,7 +12777,15 @@ "section": "def-common.SerializedPanelState", "text": "SerializedPanelState" }, - ") => RuntimeState" + ") => ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.MaybePromise", + "text": "MaybePromise" + }, + "" ], "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", "deprecated": false, @@ -12935,7 +12796,7 @@ "id": "def-public.ReactEmbeddableFactory.deserializeState.$1", "type": "Object", "tags": [], - "label": "state", + "label": "panelState", "description": [], "signature": [ { @@ -12967,7 +12828,7 @@ "signature": [ "(initialState: RuntimeState, buildApi: (apiRegistration: ", "ReactEmbeddableApiRegistration", - ", comparators: ", + ", comparators: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -12975,7 +12836,7 @@ "section": "def-common.StateComparators", "text": "StateComparators" }, - ") => ApiType, uuid: string, parentApi?: unknown) => Promise<{ Component: React.FC<{}>; api: ApiType; }>" + ") => Api, uuid: string, parentApi?: unknown) => Promise<{ Component: React.FC<{}>; api: Api; }>" ], "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", "deprecated": false, @@ -13006,7 +12867,7 @@ "signature": [ "(apiRegistration: ", "ReactEmbeddableApiRegistration", - ", comparators: ", + ", comparators: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -13014,7 +12875,7 @@ "section": "def-common.StateComparators", "text": "StateComparators" }, - ") => ApiType" + ") => Api" ], "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", "deprecated": false, @@ -13586,38 +13447,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableRegistration", - "type": "Type", - "tags": [], - "label": "ReactEmbeddableRegistration", - "description": [], - "signature": [ - "(ref: React.ForwardedRef) => React.ReactElement> | null" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableRegistration.$1", - "type": "CompoundType", - "tags": [], - "label": "ref", - "description": [], - "signature": [ - "((instance: ApiType | null) => void) | React.MutableRefObject | null" - ], - "path": "src/plugins/embeddable/public/react_embeddable_system/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "embeddable", "id": "def-public.ReactEmbeddableSavedObject", @@ -14197,7 +14026,7 @@ "\nRegisters an async {@link ReactEmbeddableFactory} getter." ], "signature": [ - " = ", + " = ", { "pluginId": "embeddable", "scope": "public", @@ -14213,7 +14042,7 @@ "section": "def-public.DefaultEmbeddableApi", "text": "DefaultEmbeddableApi" }, - ">(type: string, getFactory: () => Promise<", + ", RuntimeState extends object = SerializedState>(type: string, getFactory: () => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -14221,11 +14050,12 @@ "section": "def-public.ReactEmbeddableFactory", "text": "ReactEmbeddableFactory" }, - ">) => void" + ">) => void" ], "path": "src/plugins/embeddable/public/plugin.tsx", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "embeddable", @@ -14234,13 +14064,9 @@ "tags": [], "label": "type", "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/embeddable/public/plugin.tsx", + "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false }, { "parentPluginId": "embeddable", @@ -14258,15 +14084,15 @@ "section": "def-public.ReactEmbeddableFactory", "text": "ReactEmbeddableFactory" }, - ">" + ">" ], - "path": "src/plugins/embeddable/public/plugin.tsx", + "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_registry.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "returnComment": [], + "children": [] } - ], - "returnComment": [] + ] }, { "parentPluginId": "embeddable", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index da37c85a887e11..6faa7cbf91145b 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 564 | 1 | 454 | 8 | +| 554 | 1 | 444 | 8 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 2bf59add4087af..578ddf257efc63 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-05-21 +date: 2024-05-22 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 071e90c08e9016..29b84b185a7ece 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 9a71b04a061354..e26c0e8daac2c0 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 639bd870d2f3b2..685df68a7084cd 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-05-21 +date: 2024-05-22 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 8a079ca44054b0..0a0a98a397192e 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 8bec7ed5069bfe..c4a04834c42107 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 2100558fb1cd46..a10096a00b3652 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-05-21 +date: 2024-05-22 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 c87a73aae0c8cd..f0a58586fb6845 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-05-21 +date: 2024-05-22 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 9f51faee139e40..bc4a4049116efb 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-05-21 +date: 2024-05-22 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 b3c26e0418ce32..16c409c397b5c4 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-05-21 +date: 2024-05-22 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 17f3e8018dd8a8..bd7e759ee79779 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-05-21 +date: 2024-05-22 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 cbde1df5a1bd7d..d9763544ace122 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-05-21 +date: 2024-05-22 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 e2fc0ad78bf7b2..b5c58cac01ebc4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-05-21 +date: 2024-05-22 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 ee1d04f2a85f94..40930bdb6bdccb 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-05-21 +date: 2024-05-22 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 020a7489e26c74..b2afbfba5b08bc 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-05-21 +date: 2024-05-22 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 7e0d8f41e36411..4bf83b04e318eb 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-05-21 +date: 2024-05-22 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 54ce1f13ae8fa2..6d5605db8f2b54 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-05-21 +date: 2024-05-22 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 7744cf7e8d7ce2..6a9be51495b6f7 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-05-21 +date: 2024-05-22 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 5c04fb6b3cd7bf..14315213f38d30 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-05-21 +date: 2024-05-22 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 88c6814e49aa66..c59644b57e751e 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-05-21 +date: 2024-05-22 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 80308f6eb6b3a1..09cb25eb565bda 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-05-21 +date: 2024-05-22 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 dba7bd5ae3fa9e..5cd04577270836 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-05-21 +date: 2024-05-22 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 1775b2effece93..9a72517bfd94ed 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-05-21 +date: 2024-05-22 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 865347fd794cbc..e83fd08dc5e184 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-05-21 +date: 2024-05-22 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 6c692683ca534b..e7b15ff47b2206 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-05-21 +date: 2024-05-22 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 a8f0822dcce5c5..3daa1cc9826435 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-05-21 +date: 2024-05-22 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 da07c2c9e15c4f..8a53899d5912a6 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 4cab4f1eb96b0f..cc485026a9c3e7 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -23690,6 +23690,20 @@ "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.PackagePolicyPackage.requires_root", + "type": "CompoundType", + "tags": [], + "label": "requires_root", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 6812c5063c5141..44c8d14f84aa49 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-05-21 +date: 2024-05-22 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 | |-------------------|-----------|------------------------|-----------------| -| 1308 | 5 | 1187 | 66 | +| 1309 | 5 | 1188 | 66 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index b5d06b112b881a..b14b2ba12281b5 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-05-21 +date: 2024-05-22 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 82111931abdcf4..22d1c0e924ad2c 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-05-21 +date: 2024-05-22 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 672072da5318f6..04afe38b36489d 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-05-21 +date: 2024-05-22 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 3cc78b07194b79..095da1f16aada6 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-05-21 +date: 2024-05-22 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 c1a970c3960f7b..ff21047f396c61 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 11616878befdef..2411ced1b1181f 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 0b79d170f8b573..216b2a587eeb31 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 0cdf1a4faf51f5..91652ff4211c65 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 8ee4e69fdda842..114b16ddc66cdc 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-05-21 +date: 2024-05-22 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 ab7b213498f1b8..dbdc29d6d8486a 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-05-21 +date: 2024-05-22 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 afc5eced5219bc..449a4117039859 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index e26e3184d8d9dc..74a53f9f09dcb4 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index de54740076465a..59576b117dea1d 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 86505dababd651..7118fb705a619d 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 19d50b3ad6f1c8..b45e05a6e13f57 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 231b0981f8fd5c..1b16ac6112522a 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 925f18a8ed40f0..17ea0b1338bca7 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index dac12c4b6610c0..4a0d84229bbb05 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 6074aab369cfdb..1dfcaa8277a275 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 ff23dfc6f42929..b748c4b4a5d0c0 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-05-21 +date: 2024-05-22 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 56ed799d5ab03a..ec231f48be5cbb 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 02f60c3586d6b0..44ac84f58b11d9 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -826,6 +826,10 @@ "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts" }, + { + "plugin": "infra", + "path": "x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_client.ts" + }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/server/lib/telemetry/sender.ts" @@ -1166,6 +1170,14 @@ "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts" }, + { + "plugin": "infra", + "path": "x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts" + }, + { + "plugin": "infra", + "path": "x-pack/plugins/observability_solution/infra/public/services/telemetry/telemetry_service.test.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_service.test.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 2f82e9c74fc99c..b5d375021b5edd 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index ef1746b96a6de0..ff0fdb33bf11e7 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index ce5a83b678ec4f..53905611283592 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 3240d66b53c1a1..fe996f95791531 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-05-21 +date: 2024-05-22 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 39367c29bc3c54..238f2a516b9f2e 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-05-21 +date: 2024-05-22 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 9fc7be45857703..b7dbe09f828518 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 5b1113a7692a40..4872a7962cb453 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 8554e502a68660..8d78c95f6efab6 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 9cd34ec9160fe7..75d7830e8bdd22 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-05-21 +date: 2024-05-22 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 d1efdca260000b..ce2d14ba979d9e 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-05-21 +date: 2024-05-22 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 981a2d1c011241..4932cf23656db8 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 5ff994e9c3807a..70ed8086627b5b 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index db2e7000cadff8..a69cd515f43534 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 64d381578b5626..77aaa7de43eed3 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 3b38b3b7e866c4..d17d13f655a0a5 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 5dc7f1fb876f1d..7d98b8019a376c 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-05-21 +date: 2024-05-22 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 ca3d27b71f4737..be970c4ac4e3c0 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-05-21 +date: 2024-05-22 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 11a5b79866b102..c49c0ea96e3c9f 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-05-21 +date: 2024-05-22 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 cdc6a0f565e04a..e0ed57e28baa8a 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-05-21 +date: 2024-05-22 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 db9e773a289fc7..112b19bdd81fd4 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-05-21 +date: 2024-05-22 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 86487c67b169ce..2c5320f2c71f29 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-05-21 +date: 2024-05-22 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 8616b3d3f10a1a..e3988ab7bc941a 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-05-21 +date: 2024-05-22 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 4290c8f0548af5..8e49be1785c337 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-05-21 +date: 2024-05-22 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 d70152e49ad99a..17656aad08d963 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 7f5a50ea60493e..1098de619a4220 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 1225fd91a0ec4a..ebba771c06d92e 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 3b3d0b9fd2602f..b8d96a7dbf987f 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-05-21 +date: 2024-05-22 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 e95e262ee12457..83758deb07e35d 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-05-21 +date: 2024-05-22 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 76058ad0f7e244..0cf2f7f5f2b25c 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 23a5749bbf8b9e..670776670de620 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-05-21 +date: 2024-05-22 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 17903ee2887b91..f2cb6d3b4185e8 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-05-21 +date: 2024-05-22 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 f86cf637c3f779..ff30706fec14ab 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-05-21 +date: 2024-05-22 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 8a50f3bccb8c64..21578661ccfd64 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 1bff99f484f515..0fb82dc841e6dd 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 8c6281c1d7c953..ed69e10c537012 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-05-21 +date: 2024-05-22 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 5db024b9a19f9c..ac4cc0cd2430fa 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 84efe23ba71d45..e4b0df5e07b41b 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 48addf197c45ae..7d185a3c3a05ac 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 9987ec96a08f3a..50c2d63ce68ac1 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 9e4dc12d40a3da..bbd6f7f697cf22 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-05-21 +date: 2024-05-22 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 a86b8b4214e729..26491d6623726f 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 7a96c8128d085b..075c12742bf4d9 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 1c805c411eaafa..4c2dfb86763c73 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 ba5717307fb0a6..4db1b6902ebf18 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 a3bfbbb43b0f1f..d940fa28137555 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 ac8527534d2963..33b4f71b1c8eee 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-05-21 +date: 2024-05-22 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 64d4d7c5617cd5..da8335205412c2 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 98eac7c903d800..4dd9805dd11c73 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 effbb223c8b5a7..cb7dca2816c950 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 a038cbfdbfc4c2..e74f353c4bd633 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 0eb6d780baf6a5..0bdf905e87ea12 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-05-21 +date: 2024-05-22 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 411d63eff470dd..d57d692fa661ca 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 9be18c065bcfaf..a7ac4fc9b41931 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 3f9f6c5d89be90..1be5f19ead44e3 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 c62456937b33d5..1ba74d6d7a0f67 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-05-21 +date: 2024-05-22 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 07f379942fa210..295a5790328e49 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-05-21 +date: 2024-05-22 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 0a78e0f36196ba..d8932d1a32f61a 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 6ddd27acb66758..695a90d35402fb 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 06cd5f2c241073..3281ff7ac5e815 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 45c42785dde0b1..a90d4dbdb5059b 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 ce2996b119a514..b103dfb710a0c6 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 60aef229bbb444..96a9765231ec46 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 3509cd9d534194..aabab676964463 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 e04f152ef01124..ffad4225e2df84 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-05-21 +date: 2024-05-22 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 72dcad581873da..7ae36fd146f6ba 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-05-21 +date: 2024-05-22 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 ad15c5e0be9015..89889d04017e87 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 727d38f12c51cc..a7a0069ea43c65 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a5d11dd99b1181..222e6b46d21db7 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 77fbf58a23b2f0..43ae174f5aceb1 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 3fbf18af55c0cc..ebe19faca5a1ad 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 79de786d4ee07d..7f678ee4d57407 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-05-21 +date: 2024-05-22 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 3f3637aafe9145..6dd7a8b13eca9b 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-05-21 +date: 2024-05-22 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 735124fe5edc9f..f947914094212b 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 7be7bf6f41b8c9..62faf54e92850f 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a818c75c1d48e2..49b6c827c78cb8 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 ada1a389551b60..c0351a865ba3e9 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 b6e48d96fcb195..989b3db4243b8e 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-05-21 +date: 2024-05-22 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 1766a73c5f6606..a250e1717f83b4 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 1f21d0b643ab8c..1d3bf4c12a3ebb 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 65580810ba2454..6fcde157ec8d89 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index eee212da47264f..35fe09b50d5394 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-05-21 +date: 2024-05-22 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 a171ecc7cc4bb3..ce71cab8b91cf4 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 f7a26bb71fbdc0..914c29bd3d24c9 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 5345e4ba140457..8d4a428b8bbf24 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 4bac1efcf366b4..279c2c7070f5a1 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 69257f9ba447a6..17f26c6b483e82 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 6bff2e205795b7..0cf6ebf4dbe482 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 05f5c88695f869..9f143a5ce82cb5 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 fe68d9db331bb8..2d6f317a2038fc 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-05-21 +date: 2024-05-22 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 d3ed9407dffa30..0ca0075218ab8b 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-05-21 +date: 2024-05-22 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 156aefa40e5433..f5214fc353125b 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 ebf5bc3981120f..07a40adfcbe13c 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a87a8b446be9b7..10f31c334ac700 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 64c1c6285c5b0c..0b76211bf96fbb 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 8a9d0782da7d3e..7ce43ecdb8132f 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 e8b52ca7be7d94..c8454c29160b04 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 878a78ddcbb470..8125de2db5e9ad 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 c03d22d3dcd4dd..48ad610e75fada 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-05-21 +date: 2024-05-22 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 9853283bd7a6b2..f307305a83a92a 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 cdb221757ff384..51460510b77081 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-05-21 +date: 2024-05-22 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 196a576faa9c47..c0987b380d7095 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-05-21 +date: 2024-05-22 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 09429bb7cc45c7..5434ef8c984929 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 2fa8c727c2cf4d..f9f4970b26f2e4 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a476ab2c88c5ba..6ff7a45fe09799 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 f3cb3cb789c95b..e35e1e8c7fe9e5 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 bc7e599284bc63..a8bbf53184c4ca 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -10938,6 +10938,35 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.KibanaRequest.httpVersion", + "type": "string", + "tags": [], + "label": "httpVersion", + "description": [ + "\nThe HTTP version sent by the client." + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.KibanaRequest.protocol", + "type": "string", + "tags": [], + "label": "protocol", + "description": [ + "\nThe protocol used by the client, inferred from the httpVersion." + ], + "signature": [ + "\"http1\"" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-common.KibanaRequest.socket", @@ -17172,6 +17201,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.HttpProtocol", + "type": "Type", + "tags": [], + "label": "HttpProtocol", + "description": [ + "\nDefines an http protocol.\n(Only supporting http1 for now)\n\n- http1: regroups all http/1.x protocols" + ], + "signature": [ + "\"http1\"" + ], + "path": "packages/core/http/core-http-server/src/http_contract.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-common.HttpResponsePayload", diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 10620dd88d449f..06e4ab97254601 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 483 | 2 | 193 | 0 | +| 486 | 2 | 193 | 0 | ## Common diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index e942d48af5b7d2..5ed22ef541a1ce 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 4c4715d702c3a4..6b15ce5be210c1 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 c932da1756522e..a4936f9dd8453d 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 f238a9bb97c59d..6c616a5a6ee4d9 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 aaee85c8871871..e92ad9a20bac28 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-05-21 +date: 2024-05-22 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 216d0a76e0a13d..7e612e8a8a70b7 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 88eac30a0bd4b1..06d5d8fbeadcfe 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 fc1270bdb981d0..80d81d5fd88295 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 db683a698abcea..d67231068d5ffd 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 df19f19a83e7e8..8ed75f086afa96 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 d884c970648981..84ab23b8f2a26b 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 16961e19557534..741bcd4da75ac2 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 ca0f5b0a050341..36e4af670d5361 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-05-21 +date: 2024-05-22 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 45ae482982aee9..4a1358e544a3d5 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 64858847dda0f2..f2360595df1733 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 cfa1fbe582421a..6dba2fdcd7f294 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 dc6528e53de59c..37e8058a02f422 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-05-21 +date: 2024-05-22 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 fa536dcc162595..ff8f96913c74d1 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 fe5deb16575262..99961b17c46390 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 403af98f43e925..dfdbcb6096dc26 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 dca85594024178..4fec85e010f5ba 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 98156fe581aed2..f74274709cbcaf 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-05-21 +date: 2024-05-22 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 65d81d37195305..a1a804e08cbf3f 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 132e06155928f4..a00c37f30f7474 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 34201d5a834cb6..cb84ee91e2366d 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 e872a6cd3b1db7..7590422e4d75f4 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-05-21 +date: 2024-05-22 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 148dc728e8ce9a..bc228713d9de70 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 254ba75a86b3f6..69396520b28ff8 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 8fea11522f70a5..1b0e65e39e5da7 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 01f71ada1bac7c..952b7cdb7add6a 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 b5e5d770e8b5ae..931cfb297b0d44 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 92789ea95228c5..41f5db00535ea0 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 54e92a85655710..2bfcd6c29ba2ce 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 46dc987555e2e3..3d0eaf3fb4b633 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 cc74e9f929c633..2db0a0798af60a 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 b25ef90189874f..ed64397ef4bfe0 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index eee0260280ea66..6a00ea71d4872d 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index ce757748d30b01..ae799c4517f815 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 92368d680c9281..7d288ad42ac4a9 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-05-21 +date: 2024-05-22 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 93ecf1f1574fef..f90572814eae88 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 8c54aa97e4fe16..ad97dd2480bf55 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-05-21 +date: 2024-05-22 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 ef034254b46dab..1c27656bed7a2b 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 54cf6156507a45..5814973751948f 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a6b3f62735d31c..c3edf1774352d3 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 56968d88c3735d..2dc58b1b680562 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 3a33b1c6889993..d73a012fd5b971 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index ad0bc1e878c5ff..fc41d41ccb1b60 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 931bc0e436d2d8..f91f693cf8c4c5 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-05-21 +date: 2024-05-22 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 ee3aa2fb3eb4a8..a773df5ea18272 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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.devdocs.json b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json index a7c515398843f2..d8680e1581ea29 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json @@ -2911,10 +2911,10 @@ }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", - "id": "def-common.HASH_TO_VERSION_MAP.ingestpackagepoliciesa1a074bad36e68d54f98d2158d60f879", + "id": "def-common.HASH_TO_VERSION_MAP.ingestpackagepoliciesaef7977b81f7930f23cbfd8711ba272e", "type": "string", "tags": [], - "label": "'ingest-package-policies|a1a074bad36e68d54f98d2158d60f879'", + "label": "'ingest-package-policies|aef7977b81f7930f23cbfd8711ba272e'", "description": [], "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", "deprecated": false, 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 f21e3b41a88205..74f46271bd3851 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 9ef5ce8c2f8621..d9de66f1a4493a 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 849a57777e1a80..79043941dd82a0 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 03c0992651f890..0d215a506b4e6f 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 891eeef901294e..34f7219b8f15e0 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 964831594087bf..8f54dd0c435717 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-05-21 +date: 2024-05-22 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 7d5408d4013ae7..5d8936c419ccee 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 bfd42adfe619a2..824ccbe654fe16 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 0267126c7155e5..fec1c07bad8e61 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 cf8ad7cfa7a4ad..51b0595e7a0a98 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 277f6ca3178bd8..2e3fc37500e8fc 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-05-21 +date: 2024-05-22 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 45913c87649155..e60df97041c505 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 73c19e3ef1e73a..ccd932ffc0573c 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 2cca629fafa55a..f349c920224505 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 8503558028983d..902115f215d4be 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index d9254f2f2a4b0b..294754d71cfd9d 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 466d72ac6118b8..a5d9e94547d81c 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index d5b5b93b33a72d..75bb2881fa0e2d 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 046440497ac26e..df8622c4147a4f 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 5dc94b17e20b7a..0d4f03acdb229b 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index dbda028dadf005..211705a2dd5e20 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 28c7e6a3e8746a..9d0b9505b84bd1 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-05-21 +date: 2024-05-22 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 3f4d7e340e7fe7..f6c1bf7e6b5313 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 2abe5da009ab61..2c0b7c9d67b423 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-05-21 +date: 2024-05-22 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 e1cbf2f3e2d292..79f9f65bce8c60 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 eb86051255f333..5c69a44300b73f 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 5dff130bfa26fa..cc0081277f7bd2 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-05-21 +date: 2024-05-22 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 fdd90dfd2f95fd..f5c380905a7d80 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 ef574cec1397f8..000408fbb079ff 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index d6655876071c3b..dca947eaa0fef5 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 3ae6d799d7e310..e0db805fb5417d 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-05-21 +date: 2024-05-22 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 14766657721b5b..47d4f54b8a73ab 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 c3c06de504c429..f238c05280e76c 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 7573692c723b76..9b5c376bfa2dc2 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 308082b2132382..fd6c8b199d0e1c 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 ed0ecfd9ce4f77..adf9dfebd21ffc 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 ceac968d43bf8d..cc74331a1e79b8 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 79ea823b801a81..259ed5b77f12bc 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-05-21 +date: 2024-05-22 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 caf44af4454dd5..21b05fdda695f1 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-05-21 +date: 2024-05-22 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 94174251d70a23..b90796e1e7382d 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 4ae6c2db4c990b..7757c73d90eb50 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 59845ca8678fa6..7886497fd8b0aa 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-05-21 +date: 2024-05-22 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 c814d8b92c1280..11766a86889726 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 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 29a7c0b87f9747..089f30b5c58eb1 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 5ab1528d462a4e..9a85725f230027 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index ccd6c1aee6de7a..4951f9feaaa783 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 7f1512f9c3887c..007d2917137e49 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index b72600245c0e40..4f099f96ee1678 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index f8f8ec2faa629b..9b3a822a80ca2b 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 25593dc5c6f8e7..fdc1766b275061 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 178bcdc7c1fa83..3335b519a2e531 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 8e2d34af1f4d60..850221c6ec508b 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index cf348050883522..1f2aba8655d859 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 457998988796f8..97f8fb023bb4c5 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-05-21 +date: 2024-05-22 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 7baceae269dfdc..eaf1c29f054bfe 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index f46c04b8e1c465..d44adb4d074f18 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index b7790aac1df5d1..dc0a2a8ec15592 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index e27ba76907a2d3..e822731059f6e3 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index eb48471c5d7cf5..9706690bfea76c 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index c61d2d3a90e9a0..2fbc334b5fa1f1 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 32069f179aaa06..7088ddabd5f87f 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 4d99e14c5aac76..369c9737021b13 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 5af987d623bc89..d05539481e49fd 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-05-21 +date: 2024-05-22 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 4b92e6de06c531..84c15b0eea6a8f 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-05-21 +date: 2024-05-22 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 ea25b14490c8e5..713d9396d9244a 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 95807f6acd159b..ac3249594a8095 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 203f723f09943b..c9fabd69dd1201 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-05-21 +date: 2024-05-22 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 221ec5c72ade0f..dfe745b859aa3b 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-05-21 +date: 2024-05-22 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 cf6cf91b3cbb4c..4ca813358870b7 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-05-21 +date: 2024-05-22 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 6b3d11269f695c..7113d7d12f47fb 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 94676c7eedda81..31244e03f14bfa 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 073365645cfe30..1ba3f20176cb02 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 6244ee25d29a07..1cb1e2889de4f0 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-05-21 +date: 2024-05-22 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 96ed3c0ac7c900..9813c78f4bd617 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-05-21 +date: 2024-05-22 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 28a3f370b79415..267788ee3b4937 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-05-21 +date: 2024-05-22 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 e944710396350c..4436378a70d3cf 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-05-21 +date: 2024-05-22 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 62359a21e4d22b..7af256ba2a10ba 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-05-21 +date: 2024-05-22 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 304306b3521fbc..af7052701de8c6 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-05-21 +date: 2024-05-22 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 acfde0719a07ad..35465e1f7bd14e 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-05-21 +date: 2024-05-22 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 7b3dce357a7b39..b2d979ce605305 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 67522fb6d02a10..7e480d2ab5d941 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 9659345e176aa7..fa4dbca4fe9fd1 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-05-21 +date: 2024-05-22 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 bc1a552a78838f..76c638e59df705 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 ecdd69e47ad887..dff3e48cc5047d 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-05-21 +date: 2024-05-22 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 9e348e319b490e..bdc83ff0699669 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index c166bbb7f8e022..053e056ce5f1a3 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 9279d4b9915b83..6e15aac4317666 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index d0173892ced634..b27829e88ef603 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index c95ae25621c1d4..2ff982ad906c3c 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index c8068f130323f5..1ea4de5a6ce5f8 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 0b891eac21e047..d3e1152bc2c5c3 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-05-21 +date: 2024-05-22 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 f4521b9e0519dc..cb14577d76cfc5 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-05-21 +date: 2024-05-22 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 5b487d15a74edc..820e58bc86dea0 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.devdocs.json b/api_docs/kbn_es_query.devdocs.json index c52adf2911a0c1..d4e035d56caa09 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -678,8 +678,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" }, ") => ", { @@ -731,8 +731,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" } ], "path": "packages/kbn-es-query/src/filters/build_filters/exists_filter.ts", @@ -997,8 +997,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" }, ") => ", { @@ -1069,8 +1069,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" } ], "path": "packages/kbn-es-query/src/filters/build_filters/phrase_filter.ts", @@ -1109,8 +1109,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" }, ") => ", { @@ -1174,8 +1174,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" } ], "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.ts", @@ -1448,8 +1448,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" }, " | undefined, formattedValue?: string | undefined) => ", { @@ -1528,8 +1528,8 @@ "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewBase", - "text": "DataViewBase" + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" }, " | undefined" ], @@ -2683,6 +2683,86 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.getKqlFieldNames", + "type": "Function", + "tags": [], + "label": "getKqlFieldNames", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.KueryNode", + "text": "KueryNode" + }, + ") => string[]" + ], + "path": "packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.getKqlFieldNames.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.KueryNode", + "text": "KueryNode" + } + ], + "path": "packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.getKqlFieldNamesFromExpression", + "type": "Function", + "tags": [], + "label": "getKqlFieldNamesFromExpression", + "description": [], + "signature": [ + "(expression: string) => string[]" + ], + "path": "packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.getKqlFieldNamesFromExpression.$1", + "type": "string", + "tags": [], + "label": "expression", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es-query/src/kuery/utils/get_kql_fields.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.getLanguageDisplayName", @@ -5247,6 +5327,99 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.DataViewBase", + "type": "Interface", + "tags": [], + "label": "DataViewBase", + "description": [ + "\nA base interface for an index pattern" + ], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + " extends ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBaseNoFields", + "text": "DataViewBaseNoFields" + } + ], + "path": "packages/kbn-es-query/src/es_query/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.DataViewBase.fields", + "type": "Array", + "tags": [], + "label": "fields", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewFieldBase", + "text": "DataViewFieldBase" + }, + "[]" + ], + "path": "packages/kbn-es-query/src/es_query/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.DataViewBaseNoFields", + "type": "Interface", + "tags": [], + "label": "DataViewBaseNoFields", + "description": [], + "path": "packages/kbn-es-query/src/es_query/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.DataViewBaseNoFields.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-es-query/src/es_query/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.DataViewBaseNoFields.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "packages/kbn-es-query/src/es_query/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.EsQueryFiltersConfig", @@ -5923,31 +6096,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/es-query", - "id": "def-common.DataViewBase", - "type": "Type", - "tags": [], - "label": "DataViewBase", - "description": [ - "\nA base interface for an index pattern" - ], - "signature": [ - "{ fields: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewFieldBase", - "text": "DataViewFieldBase" - }, - "[]; id?: string | undefined; title: string; }" - ], - "path": "packages/kbn-es-query/src/es_query/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/es-query", "id": "def-common.DataViewFieldBase", diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index ef230fb2caa566..133e844769cafc 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 261 | 1 | 201 | 15 | +| 269 | 1 | 209 | 15 | ## Common diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 75bd54bb5e03d7..eacfe9a8017714 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-05-21 +date: 2024-05-22 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 a82365ccf611cc..4ee9a1be28ef14 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index a39f3065d1eac4..82946fa2328865 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index f3c998884a896e..9721a5657f643f 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 87feb70fbb2e17..05f6871fbb1a38 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 3d0db8b60a940a..620d41bc0d95fa 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 84b08242a3fca1..f1b88bfc62ccc3 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index a228c6a5901dc5..6a755483dc4b5c 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-05-21 +date: 2024-05-22 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 0c2f3e8ec37b74..0030027ade603e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 76e59c32be8158..8268d8f70c427e 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index d282d1c2aeb4dd..fae961dc600bb7 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 0f0c0ee6abc665..cb49111aca6421 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 3cbc4a371f9f74..645fdaa11e35a4 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index a22bb1077409c0..3f05134d500cc8 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index d986b4cddb4da4..d429d5bac10ef7 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-05-21 +date: 2024-05-22 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 acc4216cfd14c0..03c74b9eb2d2a3 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-05-21 +date: 2024-05-22 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 a3afaa8688bd8a..c72b6f26850fc4 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index bf33556e701277..251a692f74fe3f 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-05-21 +date: 2024-05-22 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 2223b76edfdb9e..ed9b89784ea5c7 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-05-21 +date: 2024-05-22 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 b01ab6b978882a..77bb962e31c858 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 8128d464b2ce07..3aff8fd27f0402 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-05-21 +date: 2024-05-22 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 99a630d87846f8..5f77fc56973041 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-05-21 +date: 2024-05-22 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 ca85071e52256a..621f74d3c4390b 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-05-21 +date: 2024-05-22 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 a5c5f5e1d27b68..8c63d47e674a59 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-05-21 +date: 2024-05-22 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 04b47f7bb3f72e..60c37c89100171 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-05-21 +date: 2024-05-22 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 64749bcfea3cc4..4c17fcae6cbe2e 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 5d4beaa509b87d..e3dc75c2243e72 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 8407042d9ad52e..b99efadd70af8f 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index d5bafab1cea7a9..b1420b085e4c7e 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-05-21 +date: 2024-05-22 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 89d94690345d04..eb421ccec74d22 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-05-21 +date: 2024-05-22 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 526565a66cc5ab..a3fae46dd0c69a 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 5beea129bddeac..ba661d4575e262 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index ffd604ba05980b..01c48101575fcb 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-05-21 +date: 2024-05-22 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 9177b3f7a478c6..7a0d8a0ddb2ee9 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-05-21 +date: 2024-05-22 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 cd2cbfefda569d..5862b5be6ded47 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-05-21 +date: 2024-05-22 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 6db3608739086d..6b96367f4a9765 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-05-21 +date: 2024-05-22 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 f9c100fb6f5245..1359e928b7457b 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 20308e29a86f19..33be0e8c3dec12 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 59d0eb9a98c012..b094c74fd3977f 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 9f4b1b0f6e9d52..1914ebf983161b 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-05-21 +date: 2024-05-22 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 ad241ca1f0bbc3..2f49bbad47da1c 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index ba1ed293c4ac56..6ac248c71ad50e 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index bcba2e117a3717..3194073a20c746 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-05-21 +date: 2024-05-22 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 75ea29f30e33e8..0114ffe5d26285 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 033758814732dd..8d45ceb1dd6b09 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index cff9bbbea40a46..f2b5d25b9dd038 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 1b822e466ba12d..4e6e2412811e5e 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 6eb56e3d291180..fdb2f87c364e32 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 1d8a552cadddc9..20bd72b4eeaded 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index f6ee4ba51530b3..49eea2d9808a06 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index e7dd36cc5e884d..220035e0198b09 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 32acc3c9460a9e..7e1675b4f00c7c 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 3b13f9f9cfc94a..f0f6ad186f8260 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index aaa1a2ea01aea8..ae2ae081a29490 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index ab949c4fe63c6d..2cc5a9e92de17c 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-05-21 +date: 2024-05-22 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 607e8ad93e8c69..cb7587bbb61e8a 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-05-21 +date: 2024-05-22 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 48dcf191e2a5f9..c2eb1fc95cae4b 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 5b0391677c27d9..10fd5d64ea0ef5 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 a4719ed1fb369b..653cde2b22f746 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 2a7e4d2646c052..89915d991603bd 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index caa2bc8a6550a9..47b8091114e184 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 9e3beedba8c7f8..7b79cd55d73ac1 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 58cc18a17601b5..5815c8dc635d89 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 d0153121d002cd..f4cbf4d102ea2c 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-05-21 +date: 2024-05-22 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 43346c4345f6cc..d20bfb24d70514 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-05-21 +date: 2024-05-22 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 37c1e3020d8ba1..7d25bddb5eac68 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 3d5426a6f84801..b753be6209f087 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index ce43fa84d454cb..013b026e9816a4 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 1b357c909e9e9d..547b48ec30733d 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-05-21 +date: 2024-05-22 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 c77a899de6f35c..b7b19e18769d56 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-05-21 +date: 2024-05-22 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 b9ad7724e8d913..fa93c5aba6bf01 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-05-21 +date: 2024-05-22 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 0648e4dad5f1ca..a34edb95b2c21f 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-05-21 +date: 2024-05-22 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 606325647378aa..33cc7aef1c4c39 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-05-21 +date: 2024-05-22 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 004b183eed483a..b6d9abe4cbfef2 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 9b537619c788fe..dd39d846a1e476 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 3c747ce5ee2b67..e0204e98cddaf2 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 71b2c76f12989d..c34d8688c08615 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 4928db33f402c1..f5e7c2b0f91582 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 55f1499da98e92..88481446d9d0e5 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index f207b7ae6d3274..3aed1580ec11ce 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 203c142cd9e88c..8ec610561d0546 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 86a93ac6c69426..372d4642c4dfdc 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 5e05f45d052583..3b985c23067815 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 743fbd4e01fc80..a39ca03823886f 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 6e3f5cf96a1fa1..82534f85ce4198 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-05-21 +date: 2024-05-22 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 07a69caaeb5f3f..710d7be91a0370 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-05-21 +date: 2024-05-22 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 1c0a8bb2dd60e1..afe07f2cc4f2fc 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 5f6eb2259aaaa9..50e154e63922a0 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index d8c566b576a62c..34df926fc930b7 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 19a42d5096c76a..021a1eaf17a26f 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 18991824099ae6..cf1d7598d61e4f 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index f7e7b6a350ea42..61d2413e518db0 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-05-21 +date: 2024-05-22 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 2789cac9c734f8..4206f567d2a692 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-05-21 +date: 2024-05-22 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 7a9faa054b1d64..add7eadbb2c6ba 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 5a0a828fb78170..42e6ce739427b6 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index cff368f3cad0cf..d9c3419d60da9d 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index e7b7af97ac1248..794ec3b23277d2 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 7ddc4f94b02ef5..6b3dc7e12b7594 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-05-21 +date: 2024-05-22 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 c974b208e1eec5..03694997672096 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.devdocs.json b/api_docs/kbn_presentation_containers.devdocs.json index 990eb469d20d8b..81831f10c3eeaa 100644 --- a/api_docs/kbn_presentation_containers.devdocs.json +++ b/api_docs/kbn_presentation_containers.devdocs.json @@ -143,29 +143,29 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiHasSerializableState", + "id": "def-common.apiHasRuntimeChildState", "type": "Function", "tags": [], - "label": "apiHasSerializableState", + "label": "apiHasRuntimeChildState", "description": [], "signature": [ - "(api: unknown) => api is ", + "(api: unknown) => api is ", { "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.HasSerializableState", - "text": "HasSerializableState" + "section": "def-common.HasRuntimeChildState", + "text": "HasRuntimeChildState" }, - "" + "" ], - "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiHasSerializableState.$1", + "id": "def-common.apiHasRuntimeChildState.$1", "type": "Unknown", "tags": [], "label": "api", @@ -173,7 +173,7 @@ "signature": [ "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -184,10 +184,10 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiIsPresentationContainer", + "id": "def-common.apiHasSaveNotification", "type": "Function", "tags": [], - "label": "apiIsPresentationContainer", + "label": "apiHasSaveNotification", "description": [], "signature": [ "(api: unknown) => api is ", @@ -195,17 +195,17 @@ "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.PresentationContainer", - "text": "PresentationContainer" + "section": "def-common.HasSaveNotification", + "text": "HasSaveNotification" } ], - "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", + "path": "packages/presentation/presentation_containers/interfaces/has_save_notification.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiIsPresentationContainer.$1", + "id": "def-common.apiHasSaveNotification.$1", "type": "Unknown", "tags": [], "label": "api", @@ -213,7 +213,7 @@ "signature": [ "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", + "path": "packages/presentation/presentation_containers/interfaces/has_save_notification.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -224,10 +224,10 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiPublishesLastSavedState", + "id": "def-common.apiHasSerializableState", "type": "Function", "tags": [], - "label": "apiPublishesLastSavedState", + "label": "apiHasSerializableState", "description": [], "signature": [ "(api: unknown) => api is ", @@ -235,17 +235,18 @@ "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.PublishesLastSavedState", - "text": "PublishesLastSavedState" - } + "section": "def-common.HasSerializableState", + "text": "HasSerializableState" + }, + "" ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.apiPublishesLastSavedState.$1", + "id": "def-common.apiHasSerializableState.$1", "type": "Unknown", "tags": [], "label": "api", @@ -253,7 +254,7 @@ "signature": [ "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -264,36 +265,37 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.canTrackContentfulRender", + "id": "def-common.apiHasSerializedChildState", "type": "Function", "tags": [], - "label": "canTrackContentfulRender", + "label": "apiHasSerializedChildState", "description": [], "signature": [ - "(root: unknown) => root is ", + "(api: unknown) => api is ", { "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.TrackContentfulRender", - "text": "TrackContentfulRender" - } + "section": "def-common.HasSerializedChildState", + "text": "HasSerializedChildState" + }, + "" ], - "path": "packages/presentation/presentation_containers/interfaces/track_contentful_render.ts", + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.canTrackContentfulRender.$1", + "id": "def-common.apiHasSerializedChildState.$1", "type": "Unknown", "tags": [], - "label": "root", + "label": "api", "description": [], "signature": [ "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/track_contentful_render.ts", + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -304,21 +306,20 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getContainerParentFromAPI", + "id": "def-common.apiIsPresentationContainer", "type": "Function", "tags": [], - "label": "getContainerParentFromAPI", + "label": "apiIsPresentationContainer", "description": [], "signature": [ - "(api: unknown) => ", + "(api: unknown) => api is ", { "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", "section": "def-common.PresentationContainer", "text": "PresentationContainer" - }, - " | undefined" + } ], "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", "deprecated": false, @@ -326,7 +327,7 @@ "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getContainerParentFromAPI.$1", + "id": "def-common.apiIsPresentationContainer.$1", "type": "Unknown", "tags": [], "label": "api", @@ -345,83 +346,77 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getLastSavedStateSubjectForChild", + "id": "def-common.canTrackContentfulRender", "type": "Function", "tags": [], - "label": "getLastSavedStateSubjectForChild", + "label": "canTrackContentfulRender", "description": [], "signature": [ - "(parentApi: unknown, childId: string, deserializer: (state: ", + "(root: unknown) => root is ", { "pluginId": "@kbn/presentation-containers", "scope": "common", "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - ") => RuntimeState) => ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "common", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishingSubject", - "text": "PublishingSubject" - }, - " | undefined" + "section": "def-common.TrackContentfulRender", + "text": "TrackContentfulRender" + } ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/track_contentful_render.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getLastSavedStateSubjectForChild.$1", + "id": "def-common.canTrackContentfulRender.$1", "type": "Unknown", "tags": [], - "label": "parentApi", + "label": "root", "description": [], "signature": [ "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/track_contentful_render.ts", "deprecated": false, "trackAdoption": false, "isRequired": true - }, + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.getContainerParentFromAPI", + "type": "Function", + "tags": [], + "label": "getContainerParentFromAPI", + "description": [], + "signature": [ + "(api: unknown) => ", { - "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getLastSavedStateSubjectForChild.$2", - "type": "string", - "tags": [], - "label": "childId", - "description": [], - "signature": [ - "string" - ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PresentationContainer", + "text": "PresentationContainer" }, + " | undefined" + ], + "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.getLastSavedStateSubjectForChild.$3", - "type": "Function", + "id": "def-common.getContainerParentFromAPI.$1", + "type": "Unknown", "tags": [], - "label": "deserializer", + "label": "api", "description": [], "signature": [ - "(state: ", - { - "pluginId": "@kbn/presentation-containers", - "scope": "common", - "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - ") => RuntimeState" + "unknown" ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", + "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -869,6 +864,91 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasRuntimeChildState", + "type": "Interface", + "tags": [], + "label": "HasRuntimeChildState", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.HasRuntimeChildState", + "text": "HasRuntimeChildState" + }, + "" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasRuntimeChildState.getRuntimeStateForChild", + "type": "Function", + "tags": [], + "label": "getRuntimeStateForChild", + "description": [], + "signature": [ + "(childId: string) => Partial | undefined" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasRuntimeChildState.getRuntimeStateForChild.$1", + "type": "string", + "tags": [], + "label": "childId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSaveNotification", + "type": "Interface", + "tags": [], + "label": "HasSaveNotification", + "description": [], + "path": "packages/presentation/presentation_containers/interfaces/has_save_notification.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSaveNotification.saveNotification$", + "type": "Object", + "tags": [], + "label": "saveNotification$", + "description": [], + "signature": [ + "Subject", + "" + ], + "path": "packages/presentation/presentation_containers/interfaces/has_save_notification.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-containers", "id": "def-common.HasSerializableState", @@ -884,7 +964,7 @@ "section": "def-common.HasSerializableState", "text": "HasSerializableState" }, - "" + "" ], "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", "deprecated": false, @@ -896,9 +976,19 @@ "type": "Function", "tags": [], "label": "serializeState", - "description": [], + "description": [ + "\nSerializes all state into a format that can be saved into\nsome external store. The opposite of `deserialize` in the {@link ReactEmbeddableFactory}" + ], "signature": [ "() => ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.MaybePromise", + "text": "MaybePromise" + }, + "<", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -906,7 +996,113 @@ "section": "def-common.SerializedPanelState", "text": "SerializedPanelState" }, - "" + ">" + ], + "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSerializedChildState", + "type": "Interface", + "tags": [], + "label": "HasSerializedChildState", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.HasSerializedChildState", + "text": "HasSerializedChildState" + }, + "" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSerializedChildState.getSerializedStateForChild", + "type": "Function", + "tags": [], + "label": "getSerializedStateForChild", + "description": [], + "signature": [ + "(childId: string) => ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.SerializedPanelState", + "text": "SerializedPanelState" + }, + "" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSerializedChildState.getSerializedStateForChild.$1", + "type": "string", + "tags": [], + "label": "childId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/presentation/presentation_containers/interfaces/child_state.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSnapshottableState", + "type": "Interface", + "tags": [], + "label": "HasSnapshottableState", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.HasSnapshottableState", + "text": "HasSnapshottableState" + }, + "" + ], + "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-containers", + "id": "def-common.HasSnapshottableState.snapshotRuntimeState", + "type": "Function", + "tags": [], + "label": "snapshotRuntimeState", + "description": [ + "\nSerializes all runtime state exactly as it appears. This could be used\nto rehydrate a component's state without needing to deserialize it." + ], + "signature": [ + "() => RuntimeState" ], "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", "deprecated": false, @@ -1281,75 +1477,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.PublishesLastSavedState", - "type": "Interface", - "tags": [], - "label": "PublishesLastSavedState", - "description": [], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.PublishesLastSavedState.lastSavedState", - "type": "Object", - "tags": [], - "label": "lastSavedState", - "description": [], - "signature": [ - "Subject", - "" - ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.PublishesLastSavedState.getLastSavedStateForChild", - "type": "Function", - "tags": [], - "label": "getLastSavedStateForChild", - "description": [], - "signature": [ - "(childId: string) => ", - { - "pluginId": "@kbn/presentation-containers", - "scope": "common", - "docId": "kibKbnPresentationContainersPluginApi", - "section": "def-common.SerializedPanelState", - "text": "SerializedPanelState" - }, - " | undefined" - ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-containers", - "id": "def-common.PublishesLastSavedState.getLastSavedStateForChild.$1", - "type": "string", - "tags": [], - "label": "childId", - "description": [], - "signature": [ - "string" - ], - "path": "packages/presentation/presentation_containers/interfaces/last_saved_state.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/presentation-containers", "id": "def-common.SerializedPanelState", diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 4ea9e2f0f08766..e5e184c342b0f9 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 64 | 0 | 60 | 1 | +| 70 | 0 | 64 | 1 | ## Common diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 0c7f31ad4b1f9f..1dbcbd813226a3 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -181,6 +181,46 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.apiHasInPlaceLibraryTransforms", + "type": "Function", + "tags": [], + "label": "apiHasInPlaceLibraryTransforms", + "description": [], + "signature": [ + "(unknownApi: unknown) => unknownApi is ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasInPlaceLibraryTransforms", + "text": "HasInPlaceLibraryTransforms" + } + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.apiHasInPlaceLibraryTransforms.$1", + "type": "Unknown", + "tags": [], + "label": "unknownApi", + "description": [], + "signature": [ + "unknown" + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-common.apiHasLegacyLibraryTransforms", @@ -1189,6 +1229,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.areTriggersDisabled", + "type": "Function", + "tags": [], + "label": "areTriggersDisabled", + "description": [], + "signature": [ + "(api: unknown) => boolean" + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.areTriggersDisabled.$1", + "type": "Unknown", + "tags": [], + "label": "api", + "description": [], + "signature": [ + "unknown" + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_disable_triggers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-common.fetch$", @@ -2450,20 +2523,22 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms", + "id": "def-common.HasInPlaceLibraryTransforms", "type": "Interface", "tags": [], - "label": "HasLibraryTransforms", - "description": [], + "label": "HasInPlaceLibraryTransforms", + "description": [ + "\nAPIs that inherit this interface can be linked to and unlinked from the library in place without\nre-initialization." + ], "signature": [ { "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.HasLibraryTransforms", - "text": "HasLibraryTransforms" + "section": "def-common.HasInPlaceLibraryTransforms", + "text": "HasInPlaceLibraryTransforms" }, - "" + " extends Partial,DuplicateTitleCheck" ], "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", "deprecated": false, @@ -2471,27 +2546,173 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.canLinkToLibrary", - "type": "Function", + "id": "def-common.HasInPlaceLibraryTransforms.libraryId$", + "type": "Object", "tags": [], - "label": "canLinkToLibrary", + "label": "libraryId$", "description": [ - "\n" + "\nThe id of the library item that this embeddable is linked to." ], "signature": [ - "() => Promise" + "{ source: ", + "Observable", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; pipe: { (): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + ", ...operations: ", + "OperatorFunction", + "[]): ", + "Observable", + "; }; closed: boolean; observers: ", + "Observer", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", + "Operator", + ") => ", + "Observable", + "; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "Observable", + "; operator: ", + "Operator", + " | undefined; subscribe: { (observerOrNext?: Partial<", + "Observer", + "> | ((value: string | undefined) => void) | undefined): ", + "Subscription", + "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "Subscription", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; }" ], "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [ - "True when embeddable is by-value and can be converted to by-reference" - ] + "trackAdoption": false }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.saveToLibrary", + "id": "def-common.HasInPlaceLibraryTransforms.saveToLibrary", "type": "Function", "tags": [], "label": "saveToLibrary", @@ -2507,7 +2728,7 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.saveToLibrary.$1", + "id": "def-common.HasInPlaceLibraryTransforms.saveToLibrary.$1", "type": "string", "tags": [], "label": "title", @@ -2527,15 +2748,59 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.getByReferenceState", + "id": "def-common.HasInPlaceLibraryTransforms.unlinkFromLibrary", "type": "Function", "tags": [], - "label": "getByReferenceState", + "label": "unlinkFromLibrary", "description": [ - "\n" + "\nUn-links this embeddable from the library. This method is optional, and only needed if the Embeddable\nis not meant to be re-initialized as part of the unlink operation. If the embeddable needs to be re-initialized\nafter unlinking, the getByValueState method should be used instead." ], "signature": [ - "(libraryId: string) => StateT" + "() => void" + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.HasLibraryTransforms", + "type": "Interface", + "tags": [], + "label": "HasLibraryTransforms", + "description": [ + "\nAPIs that inherit this interface can be linked to and unlinked from the library. After the save or unlink\noperation, the embeddable will be reinitialized." + ], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasLibraryTransforms", + "text": "HasLibraryTransforms" + }, + " extends LibraryTransformGuards,DuplicateTitleCheck" + ], + "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.HasLibraryTransforms.saveToLibrary", + "type": "Function", + "tags": [], + "label": "saveToLibrary", + "description": [ + "\nSave embeddable to library\n" + ], + "signature": [ + "(title: string) => Promise" ], "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", "deprecated": false, @@ -2543,10 +2808,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.getByReferenceState.$1", + "id": "def-common.HasLibraryTransforms.saveToLibrary.$1", "type": "string", "tags": [], - "label": "libraryId", + "label": "title", "description": [], "signature": [ "string" @@ -2558,18 +2823,20 @@ } ], "returnComment": [ - "by-reference embeddable state replacing by-value embeddable state" + "id of persisted library item" ] }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.checkForDuplicateTitle", + "id": "def-common.HasLibraryTransforms.getByReferenceState", "type": "Function", "tags": [], - "label": "checkForDuplicateTitle", - "description": [], + "label": "getByReferenceState", + "description": [ + "\n" + ], "signature": [ - "(newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise" + "(libraryId: string) => StateT" ], "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", "deprecated": false, @@ -2577,10 +2844,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.checkForDuplicateTitle.$1", + "id": "def-common.HasLibraryTransforms.getByReferenceState.$1", "type": "string", "tags": [], - "label": "newTitle", + "label": "libraryId", "description": [], "signature": [ "string" @@ -2589,58 +2856,10 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.checkForDuplicateTitle.$2", - "type": "boolean", - "tags": [], - "label": "isTitleDuplicateConfirmed", - "description": [], - "signature": [ - "boolean" - ], - "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.checkForDuplicateTitle.$3", - "type": "Function", - "tags": [], - "label": "onTitleDuplicate", - "description": [], - "signature": [ - "() => void" - ], - "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.HasLibraryTransforms.canUnlinkFromLibrary", - "type": "Function", - "tags": [], - "label": "canUnlinkFromLibrary", - "description": [ - "\n" - ], - "signature": [ - "() => Promise" - ], - "path": "packages/presentation/presentation_publishing/interfaces/has_library_transforms.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], "returnComment": [ - "True when embeddable is by-reference and can be converted to by-value" + "by-reference embeddable state replacing by-value embeddable state. After\nthe save operation, the embeddable will be reinitialized with the results of this method." ] }, { @@ -2660,7 +2879,7 @@ "trackAdoption": false, "children": [], "returnComment": [ - "by-value embeddable state replacing by-reference embeddable state" + "by-value embeddable state replacing by-reference embeddable state. After\nthe unlink operation, the embeddable will be reinitialized with the results of this method." ] } ], diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 71ec8729977367..fa977d8912e891 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 194 | 0 | 163 | 5 | +| 197 | 0 | 163 | 5 | ## Common diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index b86c6216a3617b..4b341ba8b47365 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 95970c71d77e86..a54729f92d11e5 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-05-21 +date: 2024-05-22 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 94df61ce58fb7e..f57ea865bff253 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index d6f3e4ab51c289..5f7cbd083e5728 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 7e4fd84b0dd732..91544eadaead17 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index c3c2363853acf9..b7e7c84ff93ef6 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 4903d3ff200ec6..ed0ba7522c843a 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 30fc075e948127..9942f9fd825bcf 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 601380c9d30637..e92405f5f8211e 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index b8c1ed9b629a21..ff818606dc1e58 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 7c8226e47817bc..a3894f12f652a8 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-05-21 +date: 2024-05-22 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 5032dc97505e5f..3e0d4ddd0d6432 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-05-21 +date: 2024-05-22 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 b2c89a60dc001c..73eaf7fccb5be7 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-05-21 +date: 2024-05-22 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 f415829ca441a3..de051f0bea2169 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-05-21 +date: 2024-05-22 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 d4424d80724c75..5008dc5e37f35a 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 339b93b9d599dd..61ec0e84db957b 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 9407f1cd9cc65c..c8ec072eaee734 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 4033cbae6925e8..c93fd45baae740 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index cfa15734e61387..0b7dffd2fb40ca 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 949ea71ede2e3b..fc06f64cc78189 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index c24cdf7a5a9dc8..5850cf773a9f9a 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 15bf5b14f49299..35c75478d6747b 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 2ed17ef65747f8..a15e5455c8619d 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 223a125969feba..20e66c10e96de8 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.devdocs.json b/api_docs/kbn_reporting_server.devdocs.json index 669e6b1b6fbb30..1a84ea86e3e2ae 100644 --- a/api_docs/kbn_reporting_server.devdocs.json +++ b/api_docs/kbn_reporting_server.devdocs.json @@ -1565,13 +1565,73 @@ }, { "parentPluginId": "@kbn/reporting-server", - "id": "def-server.REPORTING_SYSTEM_INDEX", + "id": "def-server.REPORTING_DATA_STREAM_ALIAS", "type": "string", "tags": [], - "label": "REPORTING_SYSTEM_INDEX", + "label": "REPORTING_DATA_STREAM_ALIAS", "description": [], "signature": [ - "\".reporting\"" + "\".kibana-reporting\"" + ], + "path": "packages/kbn-reporting/server/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/reporting-server", + "id": "def-server.REPORTING_DATA_STREAM_COMPONENT_TEMPLATE", + "type": "string", + "tags": [], + "label": "REPORTING_DATA_STREAM_COMPONENT_TEMPLATE", + "description": [], + "signature": [ + "\"kibana-reporting@custom\"" + ], + "path": "packages/kbn-reporting/server/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/reporting-server", + "id": "def-server.REPORTING_DATA_STREAM_WILDCARD", + "type": "string", + "tags": [], + "label": "REPORTING_DATA_STREAM_WILDCARD", + "description": [], + "signature": [ + "\".kibana-reporting*\"" + ], + "path": "packages/kbn-reporting/server/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/reporting-server", + "id": "def-server.REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY", + "type": "string", + "tags": [], + "label": "REPORTING_DATA_STREAM_WILDCARD_WITH_LEGACY", + "description": [], + "signature": [ + "\".reporting-*,.kibana-reporting*\"" + ], + "path": "packages/kbn-reporting/server/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/reporting-server", + "id": "def-server.REPORTING_LEGACY_INDICES", + "type": "string", + "tags": [], + "label": "REPORTING_LEGACY_INDICES", + "description": [], + "signature": [ + "\".reporting-*\"" ], "path": "packages/kbn-reporting/server/constants.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 3b96ee0fdd4a0b..b15d152a904630 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 88 | 0 | 87 | 0 | +| 92 | 0 | 91 | 0 | ## Server diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index b8ef05166ff557..5786dceaf00654 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 7291985160ab90..86642d624350d2 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 084e9a243d01e0..ddeedd063f557f 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 3fcb2fd285ac04..945f2b3ce6d566 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 38b5ff19ed52b6..f48b325a82a512 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-05-21 +date: 2024-05-22 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 888d69812ca64a..1de6405d826a21 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 f55586147a8210..e86496dcc6ff2b 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index ec495860f14a77..16d519a794d8b1 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 703be6afbdcd4c..f7e4549263202d 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -2125,7 +2125,7 @@ "section": "def-common.ElasticsearchClient", "text": "ElasticsearchClient" }, - ", connectorId: string, indexName: string) => Promise<", + ", connectorId: string, indexName: string | null) => Promise<", "Result", ">" ], @@ -2172,17 +2172,17 @@ { "parentPluginId": "@kbn/search-connectors", "id": "def-common.updateConnectorIndexName.$3", - "type": "string", + "type": "CompoundType", "tags": [], "label": "indexName", "description": [], "signature": [ - "string" + "string | null" ], "path": "packages/kbn-search-connectors/lib/update_connector_index_name.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [], diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 460cbff5d5d255..20ef7763f735ef 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index fb0bb6e677dcab..69069b567be196 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 25146713b03dd6..a8e1b2a04020f3 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 8cacb8ade56c83..a02ba097a69630 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 8157c0884f1cc6..f11844252c135c 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index f000ccc42caae2..f28f2bebe653bb 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index ba347a206fe75a..dd9d27b6978acf 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 89c9ac6cd97bcb..4ecafc1a5ce87a 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index a43bfacae6f644..793ffe421c2ffb 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index e9badc5d6cac8e..8d2b2d6db02cba 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 653250fe99fd71..fcbec55716205a 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index f83c503b64299b..013ed93e8038dd 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-05-21 +date: 2024-05-22 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 6a0eac2642c10f..5bc24bdf43ef32 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-05-21 +date: 2024-05-22 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 660ab0230136d3..6e21c96ae90718 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-05-21 +date: 2024-05-22 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 532d67a98fd189..78561ef5d2d5de 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-05-21 +date: 2024-05-22 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 7e81990af0b8b4..1b9f7e09c5ca26 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-05-21 +date: 2024-05-22 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 05c9ab731280f1..92cc76e5b49a3a 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 01cf68e33b84ce..9142cc1c4bdac3 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-05-21 +date: 2024-05-22 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 02e0b0a95961d8..60248fc46e002d 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-21 +date: 2024-05-22 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 f8bff7aa55dab8..55849128e2a897 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 d0f007dee697b1..93477daea464c6 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-05-21 +date: 2024-05-22 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 2b40838f0d2fdf..6513acb5dfc32a 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-05-21 +date: 2024-05-22 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 286a9ca79e9dc5..dba0917fc5c83e 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-05-21 +date: 2024-05-22 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 4b0b418d191780..a34cf58a1d6040 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 76bb5bbe729d35..10ca93221725f0 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-05-21 +date: 2024-05-22 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 36a6f3836682ca..45925d057976d1 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-05-21 +date: 2024-05-22 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 83f5de34101a20..f24807a94fa32f 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-05-21 +date: 2024-05-22 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 cb089318f279e6..a6b89977bff3cc 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-05-21 +date: 2024-05-22 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 217749ae6b242f..a2124afcb7df03 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-05-21 +date: 2024-05-22 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 314fc7966796c7..51ce7f9d0ad33e 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-05-21 +date: 2024-05-22 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 332cb7785097d5..214597d14a9821 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-05-21 +date: 2024-05-22 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.devdocs.json b/api_docs/kbn_server_http_tools.devdocs.json index eb8ca2eeaa8b2b..1fe0296f941f7b 100644 --- a/api_docs/kbn_server_http_tools.devdocs.json +++ b/api_docs/kbn_server_http_tools.devdocs.json @@ -239,8 +239,6 @@ "signature": [ "(serverOptions: ", "ServerOptions", - ", listenerOptions: ", - "ListenerOptions", ") => ", "Server" ], @@ -262,21 +260,6 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "@kbn/server-http-tools", - "id": "def-common.createServer.$2", - "type": "Object", - "tags": [], - "label": "listenerOptions", - "description": [], - "signature": [ - "ListenerOptions" - ], - "path": "packages/kbn-server-http-tools/src/create_server.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], "returnComment": [], @@ -353,54 +336,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/server-http-tools", - "id": "def-common.getListenerOptions", - "type": "Function", - "tags": [], - "label": "getListenerOptions", - "description": [], - "signature": [ - "(config: ", - { - "pluginId": "@kbn/server-http-tools", - "scope": "common", - "docId": "kibKbnServerHttpToolsPluginApi", - "section": "def-common.IHttpConfig", - "text": "IHttpConfig" - }, - ") => ", - "ListenerOptions" - ], - "path": "packages/kbn-server-http-tools/src/get_listener_options.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/server-http-tools", - "id": "def-common.getListenerOptions.$1", - "type": "Object", - "tags": [], - "label": "config", - "description": [], - "signature": [ - { - "pluginId": "@kbn/server-http-tools", - "scope": "common", - "docId": "kibKbnServerHttpToolsPluginApi", - "section": "def-common.IHttpConfig", - "text": "IHttpConfig" - } - ], - "path": "packages/kbn-server-http-tools/src/get_listener_options.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/server-http-tools", "id": "def-common.getRequestId", @@ -474,6 +409,69 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/server-http-tools", + "id": "def-common.getServerListener", + "type": "Function", + "tags": [], + "label": "getServerListener", + "description": [], + "signature": [ + "(config: ", + { + "pluginId": "@kbn/server-http-tools", + "scope": "common", + "docId": "kibKbnServerHttpToolsPluginApi", + "section": "def-common.IHttpConfig", + "text": "IHttpConfig" + }, + ", options: GetServerListenerOptions) => ", + "ServerListener" + ], + "path": "packages/kbn-server-http-tools/src/get_listener.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/server-http-tools", + "id": "def-common.getServerListener.$1", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "@kbn/server-http-tools", + "scope": "common", + "docId": "kibKbnServerHttpToolsPluginApi", + "section": "def-common.IHttpConfig", + "text": "IHttpConfig" + } + ], + "path": "packages/kbn-server-http-tools/src/get_listener.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/server-http-tools", + "id": "def-common.getServerListener.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "GetServerListenerOptions" + ], + "path": "packages/kbn-server-http-tools/src/get_listener.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/server-http-tools", "id": "def-common.getServerOptions", @@ -565,7 +563,7 @@ "ServerResponse", "> | undefined" ], - "path": "packages/kbn-server-http-tools/src/get_server_options.ts", + "path": "packages/kbn-server-http-tools/src/get_tls_options.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -585,7 +583,7 @@ "text": "ISslConfig" } ], - "path": "packages/kbn-server-http-tools/src/get_server_options.ts", + "path": "packages/kbn-server-http-tools/src/get_tls_options.ts", "deprecated": false, "trackAdoption": false, "isRequired": true diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 9c6bd063d2fb31..d2d2e5156b2a4a 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-05-21 +date: 2024-05-22 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 d15daf35119f6e..b75bf0f1d41f4d 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index d02355f1864141..88cd9766e17d65 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index f278f70cc70f26..2122f3854bd33d 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 7a7c0e4abc7100..25f3c10d0ecd5e 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 70a990dc86cd93..b110748eba5fad 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 551c17688ad187..ffb66e5c8be453 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index c39c74d3ff1ba0..2cdcee037a7158 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-05-21 +date: 2024-05-22 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 86cf4c058b955a..2775fddea4b636 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-05-21 +date: 2024-05-22 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 24b8f05da38f15..6d69f2220fb3c8 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 74ab7e60cda0ff..22612b1d5b3dea 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index a18d6af5e882fc..6f734f82e09c19 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-05-21 +date: 2024-05-22 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 63a2c8fe5fd084..4e328356abfbd0 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-05-21 +date: 2024-05-22 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 b341e88a3d8778..a7c6787d03594a 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 808c8d9cda2a97..396fd54ca0907b 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 0db6ccd92b6eb2..5a2187073c3ac2 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index d93851ce90686e..9b7b3ddcca7668 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-05-21 +date: 2024-05-22 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 5a97b86666e116..84a2720571146b 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-05-21 +date: 2024-05-22 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 5faf659d905dd0..3b7f0d235b768e 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 55a6625c449aac..ec91c83d5664d1 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 9f971c48c33ad0..0672d93f9b877c 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-05-21 +date: 2024-05-22 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 ce556ce22cc7e6..603eb39f3892b6 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-05-21 +date: 2024-05-22 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 1f21e1d670bec6..6368b645dc1457 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-05-21 +date: 2024-05-22 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 f067810bc2d3c0..c71283f3890ecf 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-05-21 +date: 2024-05-22 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 d9399fce8faa26..e0c44b3febfd02 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-05-21 +date: 2024-05-22 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 06c0bb75f57cf7..f8f8ae4e25f9cb 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 c40015c0e48bb9..021098eff045cd 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-05-21 +date: 2024-05-22 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 c68bc901132936..c1ed21b0f7755b 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 54c8a70a62f7a0..c50a54c2d98506 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-05-21 +date: 2024-05-22 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 afb6fc91a4b3cf..2ac30b19d8fded 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 42a9f4bc40d44b..22084d11698fb8 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-05-21 +date: 2024-05-22 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 b9001a5b6562e7..ddf51ea55b7a02 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 a80f86e84b440d..8cd30abf857153 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-05-21 +date: 2024-05-22 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 def79731a44b30..d8d6fbf51f631c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 e23cd0e458d21d..eeb43be79150f4 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-05-21 +date: 2024-05-22 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 e1a07a41863e35..5a069bd1535198 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-05-21 +date: 2024-05-22 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 bcc33ef23f60cf..e1d3045c59968d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 c141686b0f4494..15535683dd4893 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 116511392c8558..f83baa9c039281 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-05-21 +date: 2024-05-22 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 0a0f23d25c835a..3513b67805dc1d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-05-21 +date: 2024-05-22 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 fe4d4fe45a7c2c..2fa702f5bb771b 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 bfc99f1e3e562b..13b149a91734bf 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-05-21 +date: 2024-05-22 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 c65af1d3f2f0c4..ba2c1345521137 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-05-21 +date: 2024-05-22 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 fd7b319b92e430..966668b68b0a53 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-05-21 +date: 2024-05-22 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 4e83b507442b8e..2bf4e2f4f91025 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-05-21 +date: 2024-05-22 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 0e55028a8e69d4..44ba05c0db21dd 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index f6876cee8ce44e..8a6db037b33d20 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 909334a0459456..a6ef5530906075 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-05-21 +date: 2024-05-22 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 df0ebe958efd6e..28a786f7f0b2a2 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index d3a07478fbccab..e35fb06ae8a637 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index f03a5a1d079de3..59ad9c13dc6154 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index c1ca7f2b592250..3832906f289382 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 5e3d92d0eed19f..4fe868837419e6 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index d421765ab72a93..f8c48a59fac371 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-05-21 +date: 2024-05-22 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 6bb9e16750ece4..3610972932c174 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-05-21 +date: 2024-05-22 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 3f3e7fd57adc9b..3d0712613ee122 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-05-21 +date: 2024-05-22 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 592837eca21dfa..d01dda11b54226 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-05-21 +date: 2024-05-22 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 593f861fc50e5e..074150110667e6 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 656d929693e797..9ef0ade665ae1b 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 760a031039f29d..a9c3f03d949d35 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-05-21 +date: 2024-05-22 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 025ab7746b3c0d..8fc82df3830963 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-05-21 +date: 2024-05-22 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 1fa7571b091bf8..2cd89728edd094 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index e3673f40c89307..b108f350e3e108 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 5bcc258f976d9c..3468a4ae5bbb2d 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index a3790c5c66e637..f4a2fe75a5ffc4 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index f3fbd7a8222606..8231f97fe090ce 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 63f1e28f36b50f..53652f7ef141ef 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-05-21 +date: 2024-05-22 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 e49d7a3a002b90..a91f736bd6f624 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-05-21 +date: 2024-05-22 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 82f59ae75608a5..c7f3b73348f36c 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-05-21 +date: 2024-05-22 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 39f5d54bcd4e0d..03c536fc404f2f 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-05-21 +date: 2024-05-22 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 3273f9c3690cbc..dccb7b38d01aa8 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index dd5f8233a55ad2..de8f135ee6abf5 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 64b920ded08ec6..121c8a8f91a7eb 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 2f79aa802ee12a..bccb1f5edadfbc 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index fe471c35c68eb4..db1e5c9be48262 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 8b96d8a006ab4a..9ed2ad476e9fdb 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index fd882d49ff8780..8235330e81350e 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-05-21 +date: 2024-05-22 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 bc0d868699cbaa..bd746e39b59779 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-05-21 +date: 2024-05-22 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 c2426602bcb4a4..2823bbbea6b161 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-05-21 +date: 2024-05-22 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 2b62c2859b1452..02e1a67bc7cd1f 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.devdocs.json b/api_docs/kbn_visualization_ui_components.devdocs.json index 329e0a16222f7b..80f0cff7f6a2d7 100644 --- a/api_docs/kbn_visualization_ui_components.devdocs.json +++ b/api_docs/kbn_visualization_ui_components.devdocs.json @@ -948,15 +948,13 @@ "label": "dataView", "description": [], "signature": [ - "{ fields: ", { "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.DataViewFieldBase", - "text": "DataViewFieldBase" - }, - "[]; id?: string | undefined; title: string; }" + "section": "def-common.DataViewBase", + "text": "DataViewBase" + } ], "path": "packages/kbn-visualization-ui-components/components/query_input/filter_query_input.tsx", "deprecated": false, diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 0cb73dcfaeb321..22a7fc9442c986 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 927fdcae7afeea..65ddd95dfb5977 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 75b05f30566376..77c5dea24f7e92 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 4e049490d3d938..0e7629b35ea330 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index c91236fe7b9b8f..ebb3d28b58144e 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index cc6a500a56b3ae..b2277c55b245b2 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-05-21 +date: 2024-05-22 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 b7273bca494cd2..f91d65f0edde0c 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-05-21 +date: 2024-05-22 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 7abe2fd53d0758..b1d578ef2d1af0 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-05-21 +date: 2024-05-22 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 c3de62be7c320c..75c85c033de5d4 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-05-21 +date: 2024-05-22 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 5a988ea6661ed6..4eec2dd331e861 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-05-21 +date: 2024-05-22 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 f060c20adb20bb..ba7b2d6b9c9d2f 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-05-21 +date: 2024-05-22 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 532f0e20f76963..44ff73b0740120 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 dfd2ecd68b4419..4b4ad98edd47a0 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index d359fd60c53e48..33e8d4b7183844 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 46b78f0c4f838f..82d0fcc57a5a51 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index e73cb8b287074e..586c5885368c9a 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index cdd2746e03c617..3ba0ddb11a4f3f 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 232cc7b1d3cdf0..98678d1dd4e9f1 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-05-21 +date: 2024-05-22 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 371e312891bdb9..069cf81789821e 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-05-21 +date: 2024-05-22 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 478194f3f1f7e9..be475f12eb2bca 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-05-21 +date: 2024-05-22 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 b2a97ce8801cfe..b2e0a98b25244e 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index bfd310808ee888..7cdc2780d6ebca 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index ac0020ea37f391..95e5282055ab41 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 4d71e4a2eaa282..6fd108f9e36a02 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 038ac8cc6367d1..61b84dd0a4e44e 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-05-21 +date: 2024-05-22 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 cf5c453e5c2166..fc192848357e43 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-05-21 +date: 2024-05-22 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 4ba355557e23d7..46d353b5e521e5 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-05-21 +date: 2024-05-22 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 c5cb9e55f779d6..a7eabdb0c70c9d 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 94f5ac9c7865d9..0ef307824063c0 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 3314d7514b861b..9937a98aec1b14 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-05-21 +date: 2024-05-22 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 977e46df309f54..4ac7b1cc383957 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -10332,7 +10332,7 @@ "label": "value", "description": [], "signature": [ - "false" + "true" ], "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 5cc3915368a9ed..ff0313be67debd 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 3817e4cccfc32c..f6a5a354e5bdfe 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index b44a4847244a70..440df9aa2fc156 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index c93a7ab0e770ca..70eed8cd0ae9a0 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 8f84a2e4e4325c..e48bcc4d9e7c47 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 7154515c29d769..850ae2f1256730 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 190170d4f6e1c3..98aae3c9d1626c 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 42161e9e4b01cb..b209755b6de11f 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 1bd8c3d83ffc68..8558fb0e7560c8 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 22df04dd5598f9..a48c74d7d3cc89 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48314 | 241 | 36882 | 1862 | +| 48329 | 241 | 36889 | 1862 | ## Plugin Directory @@ -70,7 +70,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 16 | 0 | 15 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 46 | 0 | 32 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 564 | 1 | 454 | 8 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 554 | 1 | 444 | 8 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | @@ -98,7 +98,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. | 84 | 0 | 84 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 0 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1308 | 5 | 1187 | 66 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1309 | 5 | 1188 | 66 | | 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) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -345,7 +345,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 48 | 7 | 48 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 0 | 13 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 483 | 2 | 193 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 486 | 2 | 193 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 91 | 0 | 78 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 2 | 0 | @@ -488,7 +488,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 37 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 261 | 1 | 201 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 269 | 1 | 209 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 26 | 0 | 26 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 63 | 1 | 63 | 6 | @@ -588,8 +588,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 64 | 0 | 60 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 194 | 0 | 163 | 5 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 70 | 0 | 64 | 1 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 197 | 0 | 163 | 5 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 168 | 0 | 55 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | @@ -614,7 +614,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 13 | 0 | 11 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 113 | 0 | 107 | 2 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 88 | 0 | 87 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 92 | 0 | 91 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 88036a6548bfc3..2152824b6fe2d2 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 556033da8b3620..f09e26928ec1e0 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-05-21 +date: 2024-05-22 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 7ee63373323424..003bc60e2f5302 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index b3454b615130dc..7b7fdc38d6b11e 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index fddaa2e2df1124..49259057f82938 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-05-21 +date: 2024-05-22 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 5d0c5dbb77de4b..7a4ed5d321e42c 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index d9946210284249..d3b00eed9b7e36 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-05-21 +date: 2024-05-22 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 d375c564acf87d..efc596092f1d36 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-05-21 +date: 2024-05-22 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 2a50f910b307ee..f6a0f50332b50f 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-05-21 +date: 2024-05-22 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 280beb6a3684ee..3a0ba8827ce1cb 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-05-21 +date: 2024-05-22 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 428dd011352cfb..da1d86f02b29f3 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-05-21 +date: 2024-05-22 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 dcc329e1f6e1f6..a7ee1d13502abb 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-05-21 +date: 2024-05-22 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 e111fe20d6b153..6526e9567332b8 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-05-21 +date: 2024-05-22 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 4c3790c5b7fddb..3e1fc9755e622c 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-05-21 +date: 2024-05-22 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 fbe27ef01562fc..43733f7621c74e 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-05-21 +date: 2024-05-22 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 e70907ff838045..63e7da2aa37a38 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-05-21 +date: 2024-05-22 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 c5dcd9c1748305..d02560905295d8 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 8e87f75d364cfa..5cadc84edb0e73 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 204fe92313f048..700847cdcfd2ed 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 67ebde0f93bf88..fbe8c13b5e5caf 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 859e5171a10048..6c9f3dee69a05e 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index ca2477fb78910e..b4b30ca8b5011e 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -3296,7 +3296,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 31eab62a42a349..1168fc4cdfd9af 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-05-21 +date: 2024-05-22 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 e1ea13382cce55..bcb7ec4659ee68 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-05-21 +date: 2024-05-22 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 3a56fe5e3bbd5a..131c3bfa2580cf 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-05-21 +date: 2024-05-22 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 d4a2a3eaf5ba63..c43f502585aa31 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-05-21 +date: 2024-05-22 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 ce3a1b00c80a7c..35d03f10b1b536 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-05-21 +date: 2024-05-22 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 1abafe552297cc..03a2c1824ff6c8 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-05-21 +date: 2024-05-22 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 7c117ab6352d61..1f3db3a3f8c284 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-05-21 +date: 2024-05-22 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 fd8e32ab77873c..7a078e666b9953 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 51047a9b564cd6..474ed008d3f495 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index d40fef8cc27354..049775b351a2c9 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-05-21 +date: 2024-05-22 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 9e7e876cc85707..b98f9fd1ed747e 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-05-21 +date: 2024-05-22 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 6d1c4180e37f0a..3ccbef096cc921 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-05-21 +date: 2024-05-22 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 99a070937692f8..86565d96f37ef0 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-05-21 +date: 2024-05-22 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 3bb0507e70c97b..8ac56ef78a30a3 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-05-21 +date: 2024-05-22 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 2d7d1f9fdce146..adc5e0060895da 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-05-21 +date: 2024-05-22 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 f863972a1b42e1..ad35927629ddf9 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-05-21 +date: 2024-05-22 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 2e8137d5b98911..ce1341fb11a74d 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-05-21 +date: 2024-05-22 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 3b1f8fdc0ae216..28e0329866ad8f 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-05-21 +date: 2024-05-22 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 eba0fe18db9538..2ead16c34920e1 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-21 +date: 2024-05-22 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 a5bf8423a93b7d..137aa6018642fb 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-05-21 +date: 2024-05-22 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 5d8f6725e3f5b7..5a3759820b7feb 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-05-21 +date: 2024-05-22 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 1c3d61e250f9b4..195a2f423104e4 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-05-21 +date: 2024-05-22 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 309a41daf411f5..9eb7e40e9452be 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-05-21 +date: 2024-05-22 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 2c75a71b484ed3..652a81ead33550 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-05-21 +date: 2024-05-22 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 a03712cd9b8cba..ce1dbe266ff0b3 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 9a8f742ae1ae46..97d74caff335f8 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 415082b4e6a799..b4539e38a7527c 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-05-21 +date: 2024-05-22 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 57a41134bbace0..5ac4695b1924f1 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-05-21 +date: 2024-05-22 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 57cf8a9d6fa18b..bde18006da537e 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index c52757991569a9..9ec2cb1cf4ad7f 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 96a6a1abb46f71..b5f164b3d35665 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-05-21 +date: 2024-05-22 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 0f578800d0ad49..02d52f1bf0e75a 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-05-21 +date: 2024-05-22 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 ea51fac23bd2a1..5315cbe1aa1579 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-05-21 +date: 2024-05-22 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 69a2bb47777010..311b2dfb9dfd22 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-05-21 +date: 2024-05-22 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 d57a7abd67e3b0..364245c49b5bb3 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-05-21 +date: 2024-05-22 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 5497549bf44dd3..9e9501f387030c 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-05-21 +date: 2024-05-22 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 e62191b0f3eb18..39349140baea08 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-05-21 +date: 2024-05-22 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 3a51a7c629110e..16eaa33b9b80f5 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-05-21 +date: 2024-05-22 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 a7573aa7ed2f81..45d2bc4d478018 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-05-21 +date: 2024-05-22 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 3532eeea84f894..0624d3db19fe91 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-05-21 +date: 2024-05-22 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 a99ce6f4929764..b118cdf5df5d53 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-05-21 +date: 2024-05-22 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 16894149195517..e3eb4411150bd9 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-05-21 +date: 2024-05-22 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 960c21dc6e411c..c2b71fc0790246 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index e60761d38f9732..de0edc32295f7f 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-05-21 +date: 2024-05-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 3435219cb3a91f323fcbad582ebdef4263542975 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Wed, 22 May 2024 07:55:14 +0200 Subject: [PATCH 91/97] Fix `multiple_kibana_nodes` test suite (again) (#183918) ## Summary First fix wasn't enough. Looking at the last batch of grouped test failure, I was able to identify that the culprit was this test again: ``` (node:2791) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 19)  at handledRejection (node:internal/process/promises:173:23)  at promiseRejectHandler (node:internal/process/promises:119:7)  at Function.all ()  at all (/var/lib/buildkite-agent/builds/kb-n2-4-spot-a78b8dff0ec024ea/elastic/kibana-on-merge/kibana/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts:185:20)  at runNextTicks (node:internal/process/task_queues:60:5)  at processTimers (node:internal/timers:511:9)  at Object. (/var/lib/buildkite-agent/builds/kb-n2-4-spot-a78b8dff0ec024ea/elastic/kibana-on-merge/kibana/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts:231:5) Node.js process-warning detected - Terminating process... Jest exited with code 1 ``` This PR should finally resolve the flakiness of this suite (or at least stop it from causing all subsequent suites to fail) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../migrations/group2/multiple_kibana_nodes.test.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts index 63abe75209d597..65fc3830ae0693 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts @@ -176,13 +176,21 @@ describe('migration v2', () => { const startWithDelay = async (instances: Root[], delayInSec: number) => { const promises: Array> = []; + const errors: string[] = []; for (let i = 0; i < instances.length; i++) { - promises.push(instances[i].start()); + promises.push( + instances[i].start().catch((err) => { + errors.push(err.message); + }) + ); if (i < instances.length - 1) { await delay(delayInSec * 1000); } } - return Promise.all(promises); + await Promise.all(promises); + if (errors.length) { + throw new Error(`Failed to start all instances: ${errors.join(',')}`); + } }; it('migrates saved objects normally when multiple Kibana instances are started at the same time', async () => { From aa88ddb32d3c4e2f26aa17d58888495a0b6da93b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 22 May 2024 08:00:47 +0200 Subject: [PATCH 92/97] [Obs AI Assistant] Query all search connectors by default but allow user to override (#183712) Closes https://github.com/elastic/obs-ai-assistant-team/issues/134 ## Connector with custom index (`my-github-connector`) ![image](https://github.com/elastic/kibana/assets/209966/05b0f8f3-85cf-4bb2-9a2d-56cedb456f88) ## The AI Assistant can still find the entries ## End user can customize the setting ![image](https://github.com/elastic/kibana/assets/209966/46b44853-1e0e-4dd1-996f-c9c4d65064cd) --- .../server/collectors/management/schema.ts | 4 ++ .../server/collectors/management/types.ts | 1 + src/plugins/telemetry/schema/oss_plugins.json | 6 +++ .../common/index.ts | 1 + .../common/ui_settings/settings_keys.ts | 2 + .../public/index.ts | 1 + .../server/index.ts | 1 + .../server/service/client/index.test.ts | 7 ++- .../server/service/client/index.ts | 4 +- .../server/service/index.ts | 3 ++ .../service/knowledge_base_service/index.ts | 52 +++++++++++++++++-- .../common/ui_settings.ts | 19 +++++++ .../components/settings_tab/ui_settings.tsx | 2 + 13 files changed, 96 insertions(+), 7 deletions(-) diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index 9c4e025dd92b51..3a81a37dba1897 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -492,6 +492,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:aiAssistantSearchConnectorIndexPattern': { + type: 'text', + _meta: { description: 'Non-default value of setting.' }, + }, 'observability:logsExplorer:allowedDataViews': { type: 'array', items: { diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index e3b84245ce3f0d..82f31eb629a89c 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -56,6 +56,7 @@ export interface UsageStats { 'observability:aiAssistantLogsIndexPattern': string; 'observability:aiAssistantResponseLanguage': string; 'observability:aiAssistantSimulatedFunctionCalling': boolean; + 'observability:aiAssistantSearchConnectorIndexPattern': string; 'visualization:heatmap:maxBuckets': number; 'visualization:colorMapping': string; 'visualization:useLegacyTimeAxis': boolean; diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 673361881b2ff3..4b26657fc9339e 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10203,6 +10203,12 @@ "description": "Non-default value of setting." } }, + "observability:aiAssistantSearchConnectorIndexPattern": { + "type": "text", + "_meta": { + "description": "Non-default value of setting." + } + }, "observability:logsExplorer:allowedDataViews": { "type": "array", "items": { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts index dc8a9d46a7a06b..e29aa4c2e1bc90 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts @@ -41,6 +41,7 @@ export { aiAssistantResponseLanguage, aiAssistantLogsIndexPattern, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, } from './ui_settings/settings_keys'; export { concatenateChatCompletionChunks } from './utils/concatenate_chat_completion_chunks'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts index a57611079b2798..1f6d4d173cfa8b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts @@ -10,3 +10,5 @@ export const aiAssistantLogsIndexPattern = 'observability:aiAssistantLogsIndexPa export const aiAssistantResponseLanguage = 'observability:aiAssistantResponseLanguage'; export const aiAssistantSimulatedFunctionCalling = 'observability:aiAssistantSimulatedFunctionCalling'; +export const aiAssistantSearchConnectorIndexPattern = + 'observability:aiAssistantSearchConnectorIndexPattern'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts index 52d2511f9877f9..e981e1ba15d89f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts @@ -82,6 +82,7 @@ export { aiAssistantResponseLanguage, aiAssistantLogsIndexPattern, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, } from '../common/ui_settings/settings_keys'; export const plugin: PluginInitializer< diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts index 344d46f5577822..03b3f4ccdc7660 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts @@ -22,6 +22,7 @@ export { aiAssistantResponseLanguage, aiAssistantLogsIndexPattern, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, } from '../common'; export { streamIntoObservable } from './service/util/stream_into_observable'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts index ed5f9a9ee044d2..add345ffce9c57 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import type { ActionsClient } from '@kbn/actions-plugin/server/actions_client'; -import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { ElasticsearchClient, IUiSettingsClient, Logger } from '@kbn/core/server'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; import { waitFor } from '@testing-library/react'; import { last, merge, repeat } from 'lodash'; @@ -94,6 +94,10 @@ describe('Observability AI Assistant client', () => { get: jest.fn(), } as any; + const uiSettingsClientMock: DeeplyMockedKeys = { + get: jest.fn(), + } as any; + const internalUserEsClientMock: DeeplyMockedKeys = { search: jest.fn(), index: jest.fn(), @@ -172,6 +176,7 @@ describe('Observability AI Assistant client', () => { return new ObservabilityAIAssistantClient({ actionsClient: actionsClientMock, + uiSettingsClient: uiSettingsClientMock, esClient: { asInternalUser: internalUserEsClientMock, asCurrentUser: currentUserEsClientMock, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts index 0dc38698faa895..485beb7033d215 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts @@ -7,7 +7,7 @@ import type { SearchHit } from '@elastic/elasticsearch/lib/api/types'; import { notFound } from '@hapi/boom'; import type { ActionsClient } from '@kbn/actions-plugin/server'; -import type { ElasticsearchClient } from '@kbn/core/server'; +import type { ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; import type { PublicMethodsOf } from '@kbn/utility-types'; import { merge, omit } from 'lodash'; @@ -80,6 +80,7 @@ export class ObservabilityAIAssistantClient { constructor( private readonly dependencies: { actionsClient: PublicMethodsOf; + uiSettingsClient: IUiSettingsClient; namespace: string; esClient: { asInternalUser: ElasticsearchClient; @@ -659,6 +660,7 @@ export class ObservabilityAIAssistantClient { queries, categories, asCurrentUser: this.dependencies.esClient.asCurrentUser, + uiSettingsClient: this.dependencies.uiSettingsClient, }); }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts index 31249f8f6d40f6..318cf83b543737 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts @@ -276,12 +276,15 @@ export class ObservabilityAIAssistantService { // user will not be found when executed from system connector context const user = plugins.security.authc.getCurrentUser(request); + const soClient = coreStart.savedObjects.getScopedClient(request); + const basePath = coreStart.http.basePath.get(request); const { spaceId } = getSpaceIdFromPath(basePath, coreStart.http.basePath.serverBasePath); return new ObservabilityAIAssistantClient({ actionsClient: await plugins.actions.getActionsClientWithRequest(request), + uiSettingsClient: coreStart.uiSettings.asScopedToClient(soClient), namespace: spaceId, esClient: { asInternalUser: coreStart.elasticsearch.client.asInternalUser, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts index e0ba8bd48d4781..04493f9af2dde1 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -6,14 +6,15 @@ */ import { errors } from '@elastic/elasticsearch'; import { serverUnavailable, gatewayTimeout } from '@hapi/boom'; -import type { ElasticsearchClient } from '@kbn/core/server'; +import type { ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; import pLimit from 'p-limit'; import pRetry from 'p-retry'; -import { map, orderBy } from 'lodash'; +import { isEmpty, map, orderBy } from 'lodash'; import { encode } from 'gpt-tokenizer'; import { MlTrainedModelDeploymentNodesStats } from '@elastic/elasticsearch/lib/api/types'; +import { aiAssistantSearchConnectorIndexPattern } from '../../../common'; import { INDEX_QUEUED_DOCUMENTS_TASK_ID, INDEX_QUEUED_DOCUMENTS_TASK_TYPE } from '..'; import { KnowledgeBaseEntry, KnowledgeBaseEntryRole, UserInstruction } from '../../../common/types'; import type { ObservabilityAIAssistantResourceNames } from '../types'; @@ -347,19 +348,55 @@ export class KnowledgeBaseService { })); } + private async getConnectorIndices( + client: ElasticsearchClient, + uiSettingsClient: IUiSettingsClient + ) { + // improve performance by running this in parallel with the `uiSettingsClient` request + const responsePromise = client.transport.request({ + method: 'GET', + path: '_connector', + querystring: { + filter_path: 'results.index_name', + }, + }); + + const customSearchConnectorIndex = await uiSettingsClient.get( + aiAssistantSearchConnectorIndexPattern + ); + + if (customSearchConnectorIndex) { + return customSearchConnectorIndex.split(','); + } + + const response = (await responsePromise) as { results: Array<{ index_name: string }> }; + const connectorIndices = response.results.map((result) => result.index_name); + + // preserve backwards compatibility with 8.14 (may not be needed in the future) + if (isEmpty(connectorIndices)) { + return ['search-*']; + } + + return connectorIndices; + } + private async recallFromConnectors({ queries, asCurrentUser, + uiSettingsClient, modelId, }: { queries: string[]; asCurrentUser: ElasticsearchClient; + uiSettingsClient: IUiSettingsClient; modelId: string; }): Promise { const ML_INFERENCE_PREFIX = 'ml.inference.'; + const connectorIndices = await this.getConnectorIndices(asCurrentUser, uiSettingsClient); + const fieldCaps = await asCurrentUser.fieldCaps({ - index: 'search*', + index: connectorIndices, fields: `${ML_INFERENCE_PREFIX}*`, allow_no_indices: true, types: ['sparse_vector'], @@ -404,7 +441,7 @@ export class KnowledgeBaseService { }); const response = await asCurrentUser.search({ - index: 'search-*', + index: connectorIndices, query: { bool: { should: esQueries, @@ -416,12 +453,14 @@ export class KnowledgeBaseService { }, }); - return response.hits.hits.map((hit) => ({ + const results = response.hits.hits.map((hit) => ({ text: JSON.stringify(hit._source), score: hit._score!, is_correction: false, id: hit._id, })); + + return results; } recall = async ({ @@ -430,12 +469,14 @@ export class KnowledgeBaseService { categories, namespace, asCurrentUser, + uiSettingsClient, }: { queries: string[]; categories?: string[]; user?: { name: string }; namespace: string; asCurrentUser: ElasticsearchClient; + uiSettingsClient: IUiSettingsClient; }): Promise<{ entries: RecalledEntry[]; }> => { @@ -457,6 +498,7 @@ export class KnowledgeBaseService { }), this.recallFromConnectors({ asCurrentUser, + uiSettingsClient, queries, modelId, }).catch((error) => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_management/common/ui_settings.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_management/common/ui_settings.ts index d6a6db84d10846..682e66385d56b4 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_management/common/ui_settings.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_management/common/ui_settings.ts @@ -12,6 +12,7 @@ import { aiAssistantLogsIndexPattern, aiAssistantResponseLanguage, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, } from '@kbn/observability-ai-assistant-plugin/common'; import { DEFAULT_LANGUAGE_OPTION, @@ -85,4 +86,22 @@ export const uiSettings: Record = { type: 'boolean', requiresPageReload: true, }, + [aiAssistantSearchConnectorIndexPattern]: { + category: ['observability'], + name: i18n.translate( + 'xpack.observabilityAiAssistantManagement.settingsTab.h3.searchConnectorIndexPatternLabel', + { defaultMessage: 'Search connector index pattern' } + ), + value: '', + description: i18n.translate( + 'xpack.observabilityAiAssistantManagement.settingsPage.searchConnectorIndexPatternDescription', + { + defaultMessage: + 'Index pattern used by the AI Assistant when querying search connectors indices (part of the knowledge base). By default the index for every search connector will be queried', + } + ), + schema: schema.string(), + type: 'string', + requiresPageReload: true, + }, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx index 9621e77b6e675e..d366a072408222 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx @@ -11,6 +11,7 @@ import { aiAssistantLogsIndexPattern, aiAssistantResponseLanguage, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, } from '@kbn/observability-ai-assistant-plugin/public'; import { FieldRow, FieldRowProvider } from '@kbn/management-settings-components-field-row'; import { EuiSpacer } from '@elastic/eui'; @@ -22,6 +23,7 @@ const settingsKeys = [ aiAssistantLogsIndexPattern, aiAssistantResponseLanguage, aiAssistantSimulatedFunctionCalling, + aiAssistantSearchConnectorIndexPattern, ]; export function UISettings() { From e76ee75e5fef723f74e419463252da4f5a6cb241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 22 May 2024 08:17:13 +0200 Subject: [PATCH 93/97] chore(FullStory): report `buildSha` instead of `buildNum` (#183932) --- packages/analytics/shippers/fullstory/src/fullstory_shipper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts b/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts index d02e87cace6b1f..96ae3389be0173 100644 --- a/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts +++ b/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts @@ -30,7 +30,7 @@ const PAGE_VARS_KEYS = [ // Deployment-specific keys 'version', // x4, split to version_major, version_minor, version_patch for easier filtering - 'buildNum', // May be useful for Serverless, TODO: replace with buildHash + 'buildSha', // Useful for Serverless 'cloudId', 'deploymentId', 'projectId', // projectId and deploymentId are mutually exclusive. They shouldn't be sent in the same offering. From b8777aa07cb62050be3966f1e58a596e9a754ab3 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Tue, 21 May 2024 23:25:55 -0700 Subject: [PATCH 94/97] [UII] Add warning about unprivileged agents next to agent count (#183946) ## Summary Resolves https://github.com/elastic/ingest-dev/issues/3352. If there are unprivileged agents enrolled in an agent policy that requires root privileges, this PR adds a warning icon and a tooltip next to the agent count for that policy: image image ### Testing 1. enroll an agent with docker (it has unprivileged: true) 2. try to add an integration that requires root e.g. `auditd_manager` to its agent policy 3. verify that the warning icon and tooltip is visible for that policy in the list and detail views --- .../components/header/right_content.tsx | 77 ++++++++++++------- .../sections/agent_policy/list_page/index.tsx | 55 +++++++++---- 2 files changed, 88 insertions(+), 44 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/header/right_content.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/header/right_content.tsx index 743dd5186d3b57..5dd391450b0cbf 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/header/right_content.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/header/right_content.tsx @@ -19,6 +19,7 @@ import { EuiDescriptionListDescription, EuiLink, EuiToolTip, + EuiIconTip, } from '@elastic/eui'; import { useAuthz, useLink } from '../../../../../hooks'; @@ -26,6 +27,7 @@ import type { AgentPolicy } from '../../../../../types'; import { AgentPolicyActionMenu, LinkedAgentCount } from '../../../components'; import { AddAgentHelpPopover } from '../../../../../components'; import { FLEET_SERVER_PACKAGE } from '../../../../../../../../common/constants'; +import { getRootIntegrations } from '../../../../../../../../common/services'; export interface HeaderRightContentProps { isLoading: boolean; @@ -130,36 +132,55 @@ export const HeaderRightContent: React.FunctionComponent ) : ( - - - + + + + + + + + + + } + > + + + + {getRootIntegrations(agentPolicy.package_policies || []).length > 0 && + (agentPolicy.unprivileged_agents || 0) > 0 && ( + + + } /> - - - - - } - > - - + )} + ), }, { isDivider: true }, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx index b96a2e75ec5379..a2e0e6663e5cf8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx @@ -16,6 +16,7 @@ import { EuiBasicTable, EuiLink, EuiToolTip, + EuiIconTip, } from '@elastic/eui'; import type { CriteriaWithPagination } from '@elastic/eui/src/components/basic_table/basic_table'; import { i18n } from '@kbn/i18n'; @@ -23,6 +24,7 @@ import { FormattedMessage, FormattedDate } from '@kbn/i18n-react'; import { useHistory } from 'react-router-dom'; import type { AgentPolicy } from '../../../types'; +import { getRootIntegrations } from '../../../../../../common/services'; import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../../constants'; import { useAuthz, @@ -164,24 +166,45 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { - {'('} - - } - > - - - {')'} + + } + > + + + ), + }} + /> + {getRootIntegrations(agentPolicy.package_policies || []).length > 0 && + (agentPolicy.unprivileged_agents || 0) > 0 && ( + + + } + /> + + )} ), }, From 97de948dc5ce341e3402947cd7141a5eb50c26b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 22 May 2024 08:43:11 +0200 Subject: [PATCH 95/97] [Obs AI Assistant] Add scoped privileges to readUser and writeUser (#183592) Related to https://github.com/elastic/kibana/issues/183588 --- .../common/config.ts | 21 ++++---- .../observability_ai_assistant_api_client.ts | 14 ++++- .../common/users/create_users_and_roles.ts | 33 ++++++++++++ .../common/users/roles.ts | 52 +++++++++++++++++++ .../common/users/users.ts | 29 +++++++++++ .../tests/complete/complete.spec.ts | 12 ++--- .../tests/connectors/connectors.spec.ts | 6 +-- .../tests/conversations/conversations.spec.ts | 26 +++++----- .../tests/index.ts | 6 +++ .../common/config.ts | 34 ++++++------ .../common/ui/index.ts | 45 ++++------------ .../tests/contextual_insights/index.spec.ts | 2 +- .../tests/conversations/index.spec.ts | 24 ++++----- .../tests/index.ts | 6 +++ 14 files changed, 210 insertions(+), 100 deletions(-) create mode 100644 x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts create mode 100644 x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts create mode 100644 x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts index 351d43f4e30b23..559bb5d65dd2ac 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts @@ -6,15 +6,15 @@ */ import { Config, FtrConfigProviderContext } from '@kbn/test'; -import supertest from 'supertest'; -import { format, UrlObject } from 'url'; +import { UrlObject } from 'url'; import { ObservabilityAIAssistantFtrConfigName } from '../configs'; import { getApmSynthtraceEsClient } from './create_synthtrace_client'; import { InheritedFtrProviderContext, InheritedServices } from './ftr_provider_context'; import { - createObservabilityAIAssistantApiClient, + getScopedApiClient, ObservabilityAIAssistantAPIClient, } from './observability_ai_assistant_api_client'; +import { editorUser, viewerUser } from './users/users'; export interface ObservabilityAIAssistantFtrConfig { name: ObservabilityAIAssistantFtrConfigName; @@ -22,10 +22,6 @@ export interface ObservabilityAIAssistantFtrConfig { kibanaConfig?: Record; } -async function getObservabilityAIAssistantAPIClient(kibanaServerUrl: string) { - return createObservabilityAIAssistantApiClient(supertest(kibanaServerUrl)); -} - export type CreateTestConfig = ReturnType; export interface CreateTest { @@ -33,8 +29,9 @@ export interface CreateTest { servers: any; services: InheritedServices & { observabilityAIAssistantAPIClient: () => Promise<{ - readUser: ObservabilityAIAssistantAPIClient; - writeUser: ObservabilityAIAssistantAPIClient; + adminUser: ObservabilityAIAssistantAPIClient; + viewerUser: ObservabilityAIAssistantAPIClient; + editorUser: ObservabilityAIAssistantAPIClient; }>; }; junit: { reportName: string }; @@ -56,7 +53,6 @@ export function createObservabilityAIAssistantAPIConfig({ const services = config.get('services') as InheritedServices; const servers = config.get('servers'); const kibanaServer = servers.kibana as UrlObject; - const kibanaServerUrl = format(kibanaServer); const apmSynthtraceKibanaClient = services.apmSynthtraceKibanaClient(); const createTest: Omit = { @@ -68,8 +64,9 @@ export function createObservabilityAIAssistantAPIConfig({ getApmSynthtraceEsClient(context, apmSynthtraceKibanaClient), observabilityAIAssistantAPIClient: async () => { return { - readUser: await getObservabilityAIAssistantAPIClient(kibanaServerUrl), - writeUser: await getObservabilityAIAssistantAPIClient(kibanaServerUrl), + adminUser: await getScopedApiClient(kibanaServer, 'elastic'), + viewerUser: await getScopedApiClient(kibanaServer, viewerUser.username), + editorUser: await getScopedApiClient(kibanaServer, editorUser.username), }; }, }, diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts b/x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts index 865620a2d028a8..005815b38057af 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts @@ -12,8 +12,20 @@ import type { } from '@kbn/observability-ai-assistant-plugin/public'; import { formatRequest } from '@kbn/server-route-repository'; import supertest from 'supertest'; -import { format } from 'url'; import { Subtract } from 'utility-types'; +import { format, UrlObject } from 'url'; +import { kbnTestConfig } from '@kbn/test'; +import { User } from './users/users'; + +export async function getScopedApiClient(kibanaServer: UrlObject, username: User['username']) { + const { password } = kbnTestConfig.getUrlParts(); + const baseUrlWithAuth = format({ + ...kibanaServer, + auth: `${username}:${password}`, + }); + + return createObservabilityAIAssistantApiClient(supertest(baseUrlWithAuth)); +} export function createObservabilityAIAssistantApiClient(st: supertest.Agent) { return ( diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts b/x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts new file mode 100644 index 00000000000000..1492fa68114a26 --- /dev/null +++ b/x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { InheritedFtrProviderContext } from '../ftr_provider_context'; +import { allUsers } from './users'; +import { allRoles } from './roles'; + +export async function createUsersAndRoles(getService: InheritedFtrProviderContext['getService']) { + const security = getService('security'); + const log = getService('log'); + + // create roles + await Promise.all( + allRoles.map(({ name, privileges }) => { + return security.role.create(name, privileges); + }) + ); + + // create users + await Promise.all( + allUsers.map((user) => { + log.info(`Creating user: ${user.username} with roles: ${user.roles.join(', ')}`); + return security.user.create(user.username, { + password: user.password, + roles: user.roles, + }); + }) + ); +} diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts b/x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts new file mode 100644 index 00000000000000..ec5c9daac3ea96 --- /dev/null +++ b/x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts @@ -0,0 +1,52 @@ +/* + * 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. + */ + +// Example role: +// export const allAccessRole: Role = { +// name: 'all_access', +// privileges: { +// elasticsearch: { +// indices: [ +// { +// names: ['*'], +// privileges: ['all'], +// }, +// ], +// }, +// kibana: [ +// { +// feature: { +// apm: ['all'], +// actions: ['all'], +// }, +// spaces: ['*'], +// }, +// ], +// }, +// }; + +export interface Role { + name: string; + privileges: { + elasticsearch?: { + cluster?: string[]; + indices?: Array<{ + names: string[]; + privileges: string[]; + }>; + }; + kibana?: Array<{ + spaces: string[]; + base?: string[]; + feature?: { + [featureId: string]: string[]; + }; + }>; + }; +} + +export const allRoles = []; diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts new file mode 100644 index 00000000000000..b6fa38e52e60bf --- /dev/null +++ b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.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 { kbnTestConfig } from '@kbn/test'; +const password = kbnTestConfig.getUrlParts().password!; + +export interface User { + username: 'elastic' | 'editor' | 'viewer'; + password: string; + roles: string[]; +} + +export const editorUser: User = { + username: 'editor', + password, + roles: ['editor'], +}; + +export const viewerUser: User = { + username: 'viewer', + password, + roles: ['viewer'], +}; + +export const allUsers = [editorUser, viewerUser]; diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts index 38303c3a53076f..01f6e8cdd7bcea 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts @@ -302,7 +302,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { )[0]?.conversation.id; await observabilityAIAssistantAPIClient - .writeUser({ + .adminUser({ endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -378,7 +378,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { ).to.eql(0); const conversations = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }) .expect(200); @@ -422,7 +422,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { .complete(); const createResponse = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/chat/complete', params: { body: { @@ -440,7 +440,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { conversationCreatedEvent = getConversationCreatedEvent(createResponse.body); const conversationId = conversationCreatedEvent.conversation.id; - const fullConversation = await observabilityAIAssistantAPIClient.readUser({ + const fullConversation = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -454,7 +454,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { .complete(); const updatedResponse = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/chat/complete', params: { body: { @@ -484,7 +484,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { after(async () => { await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts index d51edffc9a1a82..d334251d9114e5 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts @@ -24,14 +24,14 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('Returns a 2xx for enterprise license', async () => { await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/connectors', }) .expect(200); }); it('returns an empty list of connectors', async () => { - const res = await observabilityAIAssistantAPIClient.readUser({ + const res = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'GET /internal/observability_ai_assistant/connectors', }); @@ -55,7 +55,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { }) .expect(200); - const res = await observabilityAIAssistantAPIClient.readUser({ + const res = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'GET /internal/observability_ai_assistant/connectors', }); diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts index 85c9eb725d47c3..91a418b3000ee5 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts @@ -48,7 +48,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { describe('without conversations', () => { it('returns no conversations when listing', async () => { const response = await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }) .expect(200); @@ -58,7 +58,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns a 404 for updating conversations', async () => { await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -74,7 +74,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns a 404 for retrieving a conversation', async () => { await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -92,7 +92,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { >; before(async () => { createResponse = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversation', params: { body: { @@ -105,7 +105,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { after(async () => { await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -116,7 +116,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { .expect(200); await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -141,14 +141,14 @@ export default function ApiTest({ getService }: FtrProviderContext) { namespace: 'default', public: conversationCreate.public, user: { - name: 'elastic', + name: 'editor', }, }); }); it('returns a 404 for updating a non-existing conversation', async () => { await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -164,7 +164,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns a 404 for retrieving a non-existing conversation', async () => { await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -177,7 +177,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns the conversation that was created', async () => { const response = await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -192,7 +192,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns the created conversation when listing', async () => { const response = await observabilityAIAssistantAPIClient - .readUser({ + .editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }) .expect(200); @@ -210,7 +210,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { before(async () => { updateResponse = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { @@ -234,7 +234,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns the updated conversation after get', async () => { const updateAfterCreateResponse = await observabilityAIAssistantAPIClient - .writeUser({ + .editorUser({ endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', params: { path: { diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts index 20e8338a55a3f2..e0312d2f760193 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts @@ -6,6 +6,7 @@ */ import globby from 'globby'; import path from 'path'; +import { createUsersAndRoles } from '../common/users/create_users_and_roles'; import { FtrProviderContext } from '../common/ftr_provider_context'; const cwd = path.join(__dirname); @@ -18,6 +19,11 @@ export default function observabilityAIAssistantApiIntegrationTests({ const filePattern = '**/*.spec.ts'; const tests = globby.sync(filePattern, { cwd }); + // Creates roles and users before running tests + before(async () => { + await createUsersAndRoles(getService); + }); + tests.forEach((testName) => { describe(testName, () => { loadTestFile(require.resolve(`./${testName}`)); diff --git a/x-pack/test/observability_ai_assistant_functional/common/config.ts b/x-pack/test/observability_ai_assistant_functional/common/config.ts index 35a12f10861c41..e92bf3729cb409 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/config.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/config.ts @@ -7,10 +7,13 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { merge } from 'lodash'; -import supertest from 'supertest'; -import { format, UrlObject } from 'url'; +import { UrlObject } from 'url'; import type { EBTHelpersContract } from '@kbn/analytics-ftr-helpers-plugin/common/types'; import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; +import { + editorUser, + viewerUser, +} from '../../observability_ai_assistant_api_integration/common/users/users'; import { KibanaEBTServerProvider, KibanaEBTUIProvider, @@ -21,7 +24,7 @@ import { createObservabilityAIAssistantAPIConfig, } from '../../observability_ai_assistant_api_integration/common/config'; import { - createObservabilityAIAssistantApiClient, + getScopedApiClient, ObservabilityAIAssistantAPIClient, } from '../../observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client'; import { InheritedFtrProviderContext, InheritedServices } from '../ftr_provider_context'; @@ -33,11 +36,11 @@ export interface TestConfig extends CreateTestAPI { observabilityAIAssistantUI: ( context: InheritedFtrProviderContext ) => Promise; - observabilityAIAssistantAPIClient: () => Promise< - Awaited> & { - testUser: ObservabilityAIAssistantAPIClient; - } - >; + observabilityAIAssistantAPIClient: () => Promise<{ + adminUser: ObservabilityAIAssistantAPIClient; + viewerUser: ObservabilityAIAssistantAPIClient; + editorUser: ObservabilityAIAssistantAPIClient; + }>; kibana_ebt_server: (context: InheritedFtrProviderContext) => EBTHelpersContract; kibana_ebt_ui: (context: InheritedFtrProviderContext) => EBTHelpersContract; apmSynthtraceEsClient: ( @@ -63,6 +66,8 @@ export function createTestConfig( kibanaConfig, }); + const kibanaServer = baseConfig.servers.kibana as UrlObject; + return merge( { services: testConfig.get('services'), @@ -74,17 +79,10 @@ export function createTestConfig( observabilityAIAssistantUI: (context: InheritedFtrProviderContext) => ObservabilityAIAssistantUIProvider(context), observabilityAIAssistantAPIClient: async (context: InheritedFtrProviderContext) => { - const otherUsers = await baseConfig.services.observabilityAIAssistantAPIClient(); return { - ...otherUsers, - testUser: createObservabilityAIAssistantApiClient( - supertest( - format({ - ...(baseConfig.servers.kibana as UrlObject), - auth: `test_user:changeme`, - }) - ) - ), + adminUser: await getScopedApiClient(kibanaServer, 'elastic'), + viewerUser: await getScopedApiClient(kibanaServer, viewerUser.username), + editorUser: await getScopedApiClient(kibanaServer, editorUser.username), }; }, kibana_ebt_server: KibanaEBTServerProvider, diff --git a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts index 17fd5f89c7d17b..b7234648c84646 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts @@ -6,17 +6,16 @@ */ import type { PathsOf, TypeAsArgs, TypeOf } from '@kbn/typed-react-router-config'; +import { kbnTestConfig } from '@kbn/test'; import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-app-plugin/public/routes/config'; import qs from 'query-string'; -import type { Role } from '@kbn/security-plugin-types-common'; -import { OBSERVABILITY_AI_ASSISTANT_FEATURE_ID } from '@kbn/observability-ai-assistant-plugin/common/feature'; -import { APM_SERVER_FEATURE_ID } from '@kbn/apm-plugin/server'; +import { User } from '../../../observability_ai_assistant_api_integration/common/users/users'; import type { InheritedFtrProviderContext } from '../../ftr_provider_context'; export interface ObservabilityAIAssistantUIService { pages: typeof pages; auth: { - login: () => Promise; + login: (username: User['username']) => Promise; logout: () => Promise; }; router: { @@ -54,42 +53,20 @@ export async function ObservabilityAIAssistantUIProvider({ getPageObjects, getService, }: InheritedFtrProviderContext): Promise { - const browser = getService('browser'); - const deployment = getService('deployment'); - const security = getService('security'); - const pageObjects = getPageObjects(['common']); - - const roleDefinition: Role = { - name: 'observability-ai-assistant-functional-test-role', - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['*'], - base: [], - feature: { - actions: ['all'], - [APM_SERVER_FEATURE_ID]: ['all'], - [OBSERVABILITY_AI_ASSISTANT_FEATURE_ID]: ['all'], - }, - }, - ], - }; + const pageObjects = getPageObjects(['common', 'security']); return { pages, auth: { - login: async () => { - await browser.navigateTo(deployment.getHostPort()); - await security.role.create(roleDefinition.name, roleDefinition); - await security.testUser.setRoles([roleDefinition.name, 'apm_user', 'viewer']); // performs a page reload + login: async (username: string) => { + const { password } = kbnTestConfig.getUrlParts(); + + await pageObjects.security.login(username, password, { + expectSpaceSelector: false, + }); }, logout: async () => { - await security.role.delete(roleDefinition.name); - await security.testUser.restoreDefaults(); + await pageObjects.security.forceLogout(); }, }, router: { diff --git a/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts index b1edc25053cc8a..eb1056bbcd04b3 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts @@ -101,7 +101,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte await Promise.all([ createSynthtraceErrors(), // create synthtrace - ui.auth.login(), // login + ui.auth.login('editor'), // login ]); }); diff --git a/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts index 670903591287f9..b7c33db0a41226 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts @@ -31,17 +31,17 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte const toasts = getService('toasts'); - const { header } = getPageObjects(['header', 'common']); + const { header } = getPageObjects(['header', 'security']); const flyoutService = getService('flyout'); async function deleteConversations() { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }); for (const conversation of response.body.conversations) { - await observabilityAIAssistantAPIClient.testUser({ + await observabilityAIAssistantAPIClient.editorUser({ endpoint: `DELETE /internal/observability_ai_assistant/conversation/{conversationId}`, params: { path: { @@ -53,7 +53,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte } async function deleteConnectors() { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'GET /internal/observability_ai_assistant/connectors', }); @@ -66,7 +66,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte } async function createOldConversation() { - await observabilityAIAssistantAPIClient.testUser({ + await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversation', params: { body: { @@ -150,7 +150,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte proxy = await createLlmProxy(log); - await ui.auth.login(); + await ui.auth.login('editor'); await ui.router.goto('/conversations/new', { path: {}, query: {} }); }); @@ -204,7 +204,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte }); it('creates a connector', async () => { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'GET /internal/observability_ai_assistant/connectors', }); @@ -264,7 +264,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte }); it('creates a conversation and updates the URL', async () => { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }); @@ -331,7 +331,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte }); it('does not create another conversation', async () => { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }); @@ -339,7 +339,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte }); it('appends to the existing one', async () => { - const response = await observabilityAIAssistantAPIClient.testUser({ + const response = await observabilityAIAssistantAPIClient.editorUser({ endpoint: 'POST /internal/observability_ai_assistant/conversations', }); @@ -398,7 +398,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte expect(conversation.conversation.title).to.eql('My title'); expect(conversation.namespace).to.eql('default'); expect(conversation.public).to.eql(false); - expect(conversation.user?.name).to.eql('test_user'); + expect(conversation.user?.name).to.eql('editor'); const { messages } = conversation; @@ -475,7 +475,7 @@ export default function ApiTest({ getService, getPageObjects }: FtrProviderConte expect(conversation.conversation.title).to.eql('My old conversation'); expect(conversation.namespace).to.eql('default'); expect(conversation.public).to.eql(false); - expect(conversation.user?.name).to.eql('test_user'); + expect(conversation.user?.name).to.eql('editor'); const { messages } = conversation; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/index.ts b/x-pack/test/observability_ai_assistant_functional/tests/index.ts index 9a2e4902d73665..07e81d94885920 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/index.ts @@ -7,6 +7,7 @@ import globby from 'globby'; import path from 'path'; +import { createUsersAndRoles } from '../../observability_ai_assistant_api_integration/common/users/create_users_and_roles'; import { FtrProviderContext } from '../../observability_ai_assistant_api_integration/common/ftr_provider_context'; const cwd = path.join(__dirname); @@ -19,6 +20,11 @@ export default function observabilityAIAssistantFunctionalTests({ const filePattern = '**/*.spec.ts'; const tests = globby.sync(filePattern, { cwd }); + // Creates roles and users before running tests + before(async () => { + await createUsersAndRoles(getService); + }); + tests.forEach((testName) => { describe(testName, () => { loadTestFile(require.resolve(`./${testName}`)); From 95510c1d83753fd90f23da447a53943d6e28c39b Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 22 May 2024 09:16:23 +0200 Subject: [PATCH 96/97] [Discover] Fix flaky data grid header row height test (#183896) - Closes https://github.com/elastic/kibana/issues/182785 30x https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6055 --- test/functional/services/data_grid.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index a6c91d91a89618..18282442696ff5 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -376,12 +376,12 @@ export class DataGridService extends FtrService { await this.testSubjects.click('dataGridDisplaySelectorButton'); } - public async getCurrentRowHeightValue() { + public async getCurrentRowHeightValue(scope: 'row' | 'header' = 'row') { const buttonGroup = await this.testSubjects.find( - 'unifiedDataTableRowHeightSettings_rowHeightButtonGroup' + `unifiedDataTable${scope === 'header' ? 'Header' : ''}RowHeightSettings_rowHeightButtonGroup` ); let value = ''; - await this.retry.waitFor('row height value not to be empty', async () => { + await this.retry.waitFor(`${scope} height value not to be empty`, async () => { // to prevent flakiness const selectedButton = await buttonGroup.findByCssSelector( '.euiButtonGroupButton-isSelected' @@ -401,12 +401,7 @@ export class DataGridService extends FtrService { } public async getCurrentHeaderRowHeightValue() { - const buttonGroup = await this.testSubjects.find( - 'unifiedDataTableHeaderRowHeightSettings_rowHeightButtonGroup' - ); - return ( - await buttonGroup.findByCssSelector('.euiButtonGroupButton-isSelected') - ).getVisibleText(); + return await this.getCurrentRowHeightValue('header'); } public async changeHeaderRowHeightValue(newValue: string) { From 89c415929c57b80dc96ac3bf0ca60f942454ad3e Mon Sep 17 00:00:00 2001 From: Nikita Indik Date: Wed, 22 May 2024 10:22:53 +0200 Subject: [PATCH 97/97] [Security Solution] Unskip previously flaky Cypress tests that interact with combobox (#183912) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Resolves: https://github.com/elastic/kibana/issues/183485** Unskips Related Integrations and Required Fields Cypress tests that were made flaky by an update to `EuiComboBox` in EUI `v94.3.0`. This issue was later fixed in EUI `v94.5.0`, so we are unskipping the tests. 🟢 Flaky test runner: [100 runs for ESS, 100 runs for Serverless](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6058) --- .../rule_creation/common_flows.cy.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts index abf8bc3934e210..0c4885ad353522 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts @@ -33,8 +33,8 @@ import { fillMaxSignals, fillNote, fillReferenceUrls, - // fillRelatedIntegrations, - // fillRequiredFields, + fillRelatedIntegrations, + fillRequiredFields, fillRiskScore, fillRuleName, fillRuleTags, @@ -69,14 +69,8 @@ describe('Common rule creation flows', { tags: ['@ess', '@serverless'] }, () => it('Creates and enables a rule', function () { cy.log('Filling define section'); importSavedQuery(this.timelineId); - /* - The following steps are flaky due to a recent EUI upgrade. - - Underlying EUI issue: https://github.com/elastic/eui/issues/7761 - Issue to uncomment these once the EUI fix is in place: https://github.com/elastic/kibana/issues/183485 - */ - // fillRequiredFields(); - // fillRelatedIntegrations(); + fillRequiredFields(); + fillRelatedIntegrations(); cy.get(DEFINE_CONTINUE_BUTTON).click(); cy.log('Filling about section');

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 %l;*1=@4Uu4ik(4IHx_(Dmu8OI8v4SOI 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 z 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

e*RWsxk`2uiO#!1 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